Итак, я программирую Snake в данный момент, и у меня есть метод для чтения целочисленного значения с консоли.
Когда мой метод вызывает ошибку - или по крайней мере, когда я возвращаюсь к этому методу - он не читает в новой строке из ввода, а просто передает пустую строку.
Вот мой код:JAVA: сканер не читает следующую строку // возвращает пустую строку
static int readInInt()
{
//We Read in the next line the user enters
String s = sc.nextLine();
//x returns -1 if mistake happens
int x = -1;
try
{
//Now we try to parse that int
x = Integer.parseInt(s);
x = Math.abs(x);
System.out.println("Setting the speed to " + (x*100) + "ms.");
}
catch(NumberFormatException ex)
{
//If we can't parse it we try to get the ints with a regex and then parse it
System.out.println("Du hast eine nummer eingetippt die das System nicht analysieren kann.");
System.out.println("Das System probiert jetzt die Nummer die du eingetippt hast über umwege zu Analysieren.");
s = s.replaceAll("[^-?0-9]+", "");
try
{
x = Integer.parseInt(s);
}
catch(Exception e)
{
//and if that doesnt work we just say Error!
System.out.println("Error Handling didn't work.\n"
+ "Please try again with just a simple number (e.g. 7)");
//Return an Error in form of -1
return -1;
}
x = Math.abs(x);
System.out.println("Setting the speed to " + (x*100) + "ms.");
}
return x;
}
Я объявил «СБН» в качестве статического класса переменной static Scanner sc = new Scanner(System.in);
в beginnning моей программы.
Почему сканер возвращает пустую строку? - без запроса ввода пользователя -
И да, я знаю метод .readNextInt, но мне легче справляться с такими исключениями.
Показанный фрагмент кода выглядит нормально. Я предполагаю «проблему» в другой части вашего кода. Скорее всего, вы прочитали какой-то другой ввод с помощью 'sc.nextInt()' или аналогичного. Этот метод не уничтожает новую строку, которая вводится на консоли. Если вы затем перейдете к указанному методу, оператор 'String s = sc.nextLine()' будет непосредственно потреблять эту ожидающую новую строку, не дожидаясь появления какого-либо другого ввода. Вы тоже должны посмотреть на свой другой код. – Seelenvirtuose
@Seelenvirtuose Спасибо за ответ. Bevor Я снова обращаюсь к этому методу, спрашиваю у пользователя, хочет ли он новую игру. (y/n ответ). И если он хочет новую игру, метод returnInt() снова получает доступ. Но это не должно быть проблемой. Eversicne i acces sc.nextLine() обрабатывает мою программу (меняя направление и т. Д.), Поэтому я не понимаю, почему это происходит в этой конкретной ситуации. –
Я сказал, если в _another_ place 'sc .nextInt() ', у вас есть ожидающая новая строка, которая не была использована. Следующий 'sc.nextLine()' использует только эту новую строку и не дает приоритету ничего вводить. Поэтому проблема заключается в другой части вашего кода! – Seelenvirtuose