Как вы берете несколько пользовательских входов разных типов данных в цикле for в Java? - PullRequest
0 голосов
/ 02 февраля 2019

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

I'mстолкнулся с проблемой, когда печатается первая строка, но пользователю не предлагается вводить строку.Затем сразу же печатается второй оператор print, и пользователь может набрать только int.

Пока у меня есть:

    int i, n = 10;
    String[] sentence = new String[1000];
    int[] numbers = new int[1000];



    for(i = 0; i < n; i++)
        {
        System.out.println("Enter String" + (i + 1) + ":");
        sentence[i] = scan.nextLine();

        System.out.printf("Enter int " + (i + 1) + ":");
        numbers[i] = scan.nextInt();
        }

В качестве вывода я получаю:

Enter String 1:
Enter int 1:

Здесь вы можете ввести int, и оно будет сохранено в массиве int.Но вы не можете ввести строку для массива String.

Справка Ples.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Эта проблема вызвана из-за метода nextInt().

Здесь происходит то, что метод nextInt() использует целое число, введенное пользователем, но не символ новой строки в конце пользовательского ввода, которыйсоздается при нажатии клавиши enter .

Поэтому, когда вы нажимаете , введите после ввода целого числа, следующий вызов nextLine() потребляет символ новой строки, который не использовался в последней итерации цикла методом nextInt(),Вот почему он пропускает ввод String на следующей итерации цикла и не ждет, пока пользователь введет String

Solution

Вы можете использовать символ новой строки, позвонив nextLine() после nextInt() call

for(i = 0; i < n; i++)
{
    System.out.println("Enter String" + (i + 1) + ":");
    sentence[i] = scan.nextLine();

    System.out.printf("Enter int " + (i + 1) + ":");
    numbers[i] = scan.nextInt();
    scan.nextLine();             // <------ this call will consume the new line character
}
0 голосов
/ 02 февраля 2019

Поместите scan.nextLine () так:

for(i = 0; i < n; i++){
    System.out.println("Enter String" + (i + 1) + ":");
    sentence[i] = scan.nextLine();

    System.out.printf("Enter int " + (i + 1) + ":");
    numbers[i] = scan.nextInt();
    scan.nextLine();

}
...