Используйте want = scan.next();
вместо nextLine()
.
Причина вашей проблемы в том, что после предыдущего nextInt()
вы все еще находитесь на той же строке, а nextLine()
возвращает остаток текущей строки.
Вот маленький фрагмент для воспроизведения поведения:
Scanner sc = new Scanner(System.in);
System.out.println("nextInt() = " + sc.nextInt());
System.out.println("nextLine() = " + sc.nextLine());
Когда вы набираете, скажем, 5
, а затем нажимаете Введите , вывод будет:
nextInt() = 5
nextLine() =
То есть nextLine()
не заблокировал ваш ввод, потому что в текущей строке все еще остается пустая строка.
Для сравнения, если вы наберете, скажем, 5 yeah!
, а затем нажмете Введите , тогда вы получите:
nextInt() = 5
nextLine() = yeah!
Обратите внимание, что " yeah!"
на самом деле происходит из той же строки, что и 5
. Это точно так, как указано в документации:
String nextLine()
: этот сканер перемещается дальше текущей строки и возвращает пропущенный ввод. Этот метод возвращает остаток текущей строки , исключая любой разделитель строк в конце. Позиция установлена в начале следующей строки.
На полуоткрытых диапазонах
Предполагая, что угадываемое число находится в диапазоне от 1 до 10 включительно, следующий код является "неправильным":
numRandom = rand.nextInt(9)+1; // this can only be in 1..9 range inclusive!
Вот выдержка из документации java.util.Random
:
int nextInt(int n)
: возвращает псевдослучайное, равномерно распределенное значение типа int между 0 (включительно) и указанным значением (исключая)
То есть, подобно многим методам в Java API, Random.nextInt(int)
использует полуоткрытый диапазон с включающей нижней границей и исключительной верхней границей.
Похожие вопросы