Java Scanner在输入未知内容时中断

时间:2015-09-17 19:40:41

标签: java java.util.scanner

我有一个程序,其中扫描程序正在响应您键入的某些内容。 以下是代码示例:

public static void main(String[] args) {
   Scanner inp = new Scanner(System.in);
   int i=0;
   String in = inp.nextLine();
   while(i==0){
      if(in.equals("x")){
         System.out.println("> y");
         in = inp.nextLine();
      }
   }

一切正常,就像输入x一样,它说y。但是,如果我输入z,没有任何反应,那么如果我键入x,则没有任何反应,它会完全中断。我该怎么办?

6 个答案:

答案 0 :(得分:3)

你有一个无限循环,所以你的程序卡在那里。因为第二次输入z不等于x所以你的代码流不会进入if并且陷入无限循环,因为你的i变量也没有改变。

答案 1 :(得分:3)

你创造了无限循环。 当输入为z时,检查等于失败并且循环在条件i == 0上保持旋转,这始终为真。

答案 2 :(得分:1)

移动此行:

in = inp.nextLine();

在它所在的花括号之外。

另外,正如其他人所说,你有一个无限循环。修复它的一种方法是使用一个标记字符(比如'q')来检查并检测它是否会发生。

答案 3 :(得分:1)

如果您希望x在输入未接受的值后继续工作,请按以下方式调出in = inp.nextLine();

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner inp = new Scanner(System.in);
    int i=0;
    String in = inp.nextLine();
    while(i==0){
        if(in.equals("x")){
            System.out.println("> y");
            //in = inp.nextLine(); remove this
        }
        in = inp.nextLine();
    }
}

不确定这是否是您要找的。

此外,如果您不打算更改i,您可以通过执行此操作来简单地保持while循环。

    while(true){
        //do stuff here
    }

答案 4 :(得分:1)

就像每个人都说的那样,你处于一个无限循环中,当你输入z并且相等检查失败时,你再也不会再输入if块来检查用户输入,所以输入{ x之后再次{1}}不会打印任何内容。

假设你想保持你的程序不变并不断要求输入,你可以移动:

z
in = inp.nextLine(); 阻止之后

您可能希望有某种终止条件,因此程序可以退出(就像您在用户键入if或其他内容时退出循环一样)。

答案 5 :(得分:1)

当您输入malloc时,没有任何反应,因为如果inpout不等于z,您没有指示它执行任何操作。

由于x处于if状态,如果您未输入in = inp.nextLine();,它将无法从键盘读取任何内容。所以把它移到循环之外。

x