Почему этот цикл for не позволяет мне вводить текст в первом цикле?
-
06-07-2019 - |
Вопрос
Что я хочу сделать, это запросить у пользователя количество строк для чтения в массив, а затем попросить пользователя ввести это количество строк и прочитать их в массив.Когда я запускаю этот код, он никогда не запрашивает у меня ввод первого цикла первого цикла for, просто выводит "String # 0:Строка №1:" и тогда я смогу ввести текст.Почему это так и что я сделал не так?
import java.util.Scanner;
public class ovn9
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.print("Number of inputs: ");
int lines= sc.nextInt();
String[] text=new String[lines];
for(int x=0; x<text.length; x++)
{
System.out.print("String #"+x+": ");
text[x] = sc.nextLine();
}
for(int y=0; y<text.length; y++)
System.out.println(text[y]);
}
}
Решение
Буферизация.
nextInt()
не использует новую строку во входном буфере, которая была помещена туда при вводе количества входных данных.На итерации 0 цикла for в буфере уже есть строка ввода и nextLine()
может завершиться немедленно, и программа будет ждать новой строки ввода только на итерации 1.Чтобы проигнорировать перевод строки во входных данных, вы можете добавить просто другую nextLine()
вызовите перед входом в цикл for.
Другие советы
Возможно, вам следует изменить цикл, чтобы использовать 'sc.next ()'
for ( int x = 0; x < lines; x++ ) {
System.out.print("String #" + x + ": ");
text[x] = sc.next();
}
Это можно объяснить с помощью Java API
String next (): находит и возвращает следующий полный токен с этого сканера.
String nextLine (): продвигает этот сканер за текущую строку и возвращает пропущенный ввод.