Java 扫描仪内部方法不等待回答
已经为此挣扎了一天,在论坛上来回阅读,没有结果。任何人都可以告诉我为什么函数aMenu()的第二次调用返回零,而不等待新的用户输入?我尝试了各种方法,比如hasNextInt(),nextLine(),但都没有效果。在用户写入某些内容之前不应该hasNextInt()块吗?我怎样才能解决这个问题?谢谢Java 扫描仪内部方法不等待回答,java,java.util.scanner,Java,Java.util.scanner,已经为此挣扎了一天,在论坛上来回阅读,没有结果。任何人都可以告诉我为什么函数aMenu()的第二次调用返回零,而不等待新的用户输入?我尝试了各种方法,比如hasNextInt(),nextLine(),但都没有效果。在用户写入某些内容之前不应该hasNextInt()块吗?我怎样才能解决这个问题?谢谢 package FirstJavaPackage; import java.util.Scanner; public class testScanner { public static
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;
}
}
输出为:
在阿门努。。。输入一个整数:
2.
你输入了:2
在阿门努。。。输入一个整数:
您键入了:0您需要在调用
aMenu()
时重复使用相同的Scanner
对象:
有关进一步的讨论,请参见在第一次调用后,您实际上关闭了输入流中的
系统
从文件中:
尽量不要在aMenu
结束时关闭扫描仪:在aMenu
方法之外初始化扫描仪,并使该方法使用它。因为扫描仪。关闭将关闭整个输入源,您应该将扫描仪传递到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;
}
}
谢谢大家,现在它工作得很好,但我仍然不完全理解逻辑。好的,我在aMenu()函数结束时关闭了输入流,但我不是在下一次调用时用line Scanner keyboard=new Scanner(System.in)再次打开它吗?这就是我如何预测它发生的,我已经阅读了你推荐的链接,但我想我仍然错过了一些东西。为什么不这样工作,稍后关闭并重新打开流?再次感谢你,你在这里创造了一个伟大的社区@xx:首先,当你调用keyboard.close()
时,它也会关闭系统.in
。从那时起,无论您是否尝试创建任何进一步的扫描仪,您都无法从系统中读取任何内容。谢谢,现在我明白了。因此,一旦一个流关闭,它将在程序的其余部分保持关闭状态,并且您无法扫描不存在的内容。。
When a Scanner is closed, it will close its input source if the source
implements the Closeable interface.
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;
}
}