Чтение нескольких входов сканера

То, что я пытаюсь сделать, это иметь несколько входов, которые имеют разные переменные. Каждая переменная будет частью различных уравнений. Я ищу способ сделать это, и, кажется, у меня есть идея. Я просто хочу знать, будет ли это законным и, возможно, есть лучший способ сделать это.

import java.util.*;

public class Example{

public static void main(String args[]){

    Scanner dd = new Scanner(System.in);

    System.out.println("Enter number.");
    int a = dd.nextInt();
    System.out.println("Enter number.");
    int b = dd.nextInt();
    System.out.println("Enter number.");
    int c = dd.nextInt();
  }
}

person John    schedule 12.12.2011    source источник
comment
Да, это правильный подход. Я не знаю лучшего способа сделать это. Я думаю, было бы более удобно, если бы вы использовали nextString() и читали их все как одну строку и анализировали их.   -  person Chip McCormick    schedule 12.12.2011
comment
Кстати, похоже, что название вашего вопроса может ввести в заблуждение. У вас есть один сканер, который вы считываете несколько раз.   -  person Chip McCormick    schedule 12.12.2011
comment
Основная проблема, о которой я должен вас предупредить при использовании Scanner, заключается в том, что вы должны быть осторожны с токеном End Of Line (EOL). Метод nextInt() не работает с токеном EOL, в отличие от nextLine(). В некоторых случаях вам может понадобиться вызвать nextLine() без сохранения ввода только для обработки токена EOL. Это не проблема в вашем текущем коде, и пока нет необходимости его менять.   -  person Hovercraft Full Of Eels    schedule 12.12.2011
comment
Я не уверен, кто проголосовал за вас и почему, но я проголосовал за вас за то, что вы задали вопрос, чтобы попытаться улучшить вашу программу.   -  person Hovercraft Full Of Eels    schedule 12.12.2011
comment
@Chip McCormick Извините, я не знал лучшей темы, если у вас есть предложение, я изменюсь, чтобы помочь всем, у кого может возникнуть этот вопрос.   -  person John    schedule 12.12.2011
comment
@HovercraftFullOfEels Спасибо, я просто пытаюсь научиться лучше всего у опытных людей, потому что, как я уже сказал, на данный момент у меня действительно нет никого, кто мог бы спросить совета, кроме этого форума.   -  person John    schedule 12.12.2011


Ответы (1)


Если каждый вход задает один и тот же вопрос, вы должны использовать цикл for и массив входных данных:

Scanner dd = new Scanner(System.in);
int[] vars = new int[3];

for(int i = 0; i < vars.length; i++) {
  System.out.println("Enter next var: ");
  vars[i] = dd.nextInt();
}

Или, как предложил Чип, вы можете разобрать ввод из одной строки:

Scanner in = new Scanner(System.in);
int[] vars = new int[3];

System.out.println("Enter "+vars.length+" vars: ");
for(int i = 0; i < vars.length; i++)
  vars[i] = in.nextInt();

Вы были на правильном пути, и то, что вы сделали, работает. Это просто более приятный и гибкий способ ведения дел.

person Jon Egeland    schedule 12.12.2011
comment
ну, вопросы неправильные, я просто использовал их, чтобы показать, что я делаю, они все разные, просто интересно, нужно ли мне создавать новый сканер для каждого ввода, или я могу просто сделать один сканер и дать каждому вводу другую переменную - person John; 12.12.2011
comment
Нет, Scanner это Stream. Другими словами, он берет все входные данные из источника и отправляет самую раннюю доступную информацию, когда вы ее вызываете. Таким образом, in.nextInt() ожидает системного ввода (клавиатуры), а затем возвращает следующие доступные данные в виде int. - person Jon Egeland; 12.12.2011
comment
Что я делаю, так это практикую создание классов объектов, и я создаю объект обратной учетной записи, запускаю учетную запись с начальным балансом и именем, а затем методом депозита и вывода средств, поэтому мне нужны разные переменные для разных входов. - person John; 12.12.2011
comment
хорошо, у вас есть предложение о том, как это сделать, я учусь в школе информатики, но я еще не хожу на какие-либо уроки программирования, поэтому у меня нет учителя, чтобы спросить, но я все еще пытаюсь погрузиться в java - person John; 12.12.2011
comment
Тогда вы были правы изначально. Это был бы лучший способ сделать это, но, очевидно, с другими сообщениями для пользователя. - person Jon Egeland; 12.12.2011