已经纠结了一天了,看了论坛的讨论来来回回,没有结果。谁能告诉我为什么函数aMenu()的第二次调用返回零,而不是等待新的用户输入?我尝试了各种各样的东西,比如hasNextInt(), nextLine(),没有工作。不应该有nextint()块,直到用户写东西?我怎么解决这个问题?谢谢。
package FirstJavaPackage;
import java.util.Scanner;
public class testScanner
{
public static void main(String[] args)
{
int choice = aMenu();
System.out.println("You typed: "+choice);
choice = aMenu();
System.out.println("You typed: "+choice);
}
public static int aMenu()
{
int result = 0;
System.out.println("In aMenu... enter an int: ");
Scanner keyboard = new Scanner(System.in);
if (keyboard.hasNextInt())
result = keyboard.nextInt();
keyboard.close();
return result;
}
}
输出为:
在aMenu…输入一个int:2你输入:2在aMenu…输入一个int:您键入:0
您需要在调用aMenu()
时重用相同的Scanner
对象:
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
int choice = aMenu(keyboard);
System.out.println("You typed: "+choice);
choice = aMenu(keyboard);
System.out.println("You typed: "+choice);
}
public static int aMenu(Scanner keyboard)
{
int result = 0;
System.out.println("In aMenu... enter an int: ");
result = keyboard.nextInt();
return result;
}
有关进一步的讨论,请参见如何在System.in上使用多个Scanner对象?
在第一次调用之后,您实际上关闭了System.in
输入流。
来自Scanner.close()文档:
When a Scanner is closed, it will close its input source if the source implements the Closeable interface.
尽量不要在aMenu
的末尾close
您的扫描仪:在aMenu
方法之外初始化扫描仪,并使该方法使用它。
由于scanner.close
将关闭整个输入源,您应该将scanner传递给您的aMenu方法并执行如下操作:
import java.util.Scanner;
public class TestScanner
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
int choice = 0;
do
{
choice = aMenu(keyboard);
System.out.println("You typed: " + choice);
} while (choice > 0);
keyboard.close();
}
public static int aMenu(Scanner keyboard)
{
int result = 0;
System.out.println("In aMenu... enter an int: ");
if (keyboard.hasNextInt())
result = keyboard.nextInt();
return result;
}
}