Недавно моя подруга показала мне свой код в поисках моего совета о том, почему это не сработает.Ее оригинальный код был таким:
public static void printStem(String word) ...
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter the words: ");
String word = keyboard.next();
printStem(word);
while (keyboard.hasNext())
{
printStem(word);
word = keybord.next();
}
}
Это даст действительно странные результаты.Он дважды спросит пользователя, затем выполнит printStem
дважды (что можно было бы ожидать), и после этого он продолжит работу и всегда печатает только первый введенный корпус (слово).
В конце концовЯ понял, что это будет работать, как и ожидалось, при удалении keyboard.next()
из-за пределов цикла, например:
public static void printStem(String word) ...
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter the words: ");
while (keyboard.hasNext())
{
String word = keybord.next();
printStem(word);
}
}
Когда меня спросили, почему это так, у меня не было никакого правдоподобного объяснения, поскольку это должно вести себя идентично.Мое лучшее предположение - что-то должно быть вонючим с hasNext()
, но я не мог понять, почему именно.Так.Что здесь происходит?Любое объяснение приветствуется:)