在扫描仪读取输入之前必须多次键入

时间:2016-03-23 11:48:16

标签: java java.util.scanner

如果我运行此代码

Scanner sc = new Scanner();
while (true) {
        if (sc.next().equals("1"))
            System.out.println("--1--");

        else if (sc.next().equals("2"))
            System.out.println("--2--");

        else if (sc.next().equals("3"))
            System.out.println("--3--");

        else if (sc.next().equals("4"))
            System.out.println("--4--");

        else if (sc.next().equals("help"))
            System.out.println("--help--");
    }

我第一次输入时不会读取。我必须在读取输入之前输入2-4次。会话可能如下所示:

1
1
1
1
--1--
3
3
--3--
help
2
1
help
--help--

无论我键入什么,它只会读取四个输入的最后一个输入。 有时它会在两次输入后读取。我真的很困惑。 我应该使用多个扫描仪吗?

3 个答案:

答案 0 :(得分:3)

你的概念在这里是错误的。

每当你要求sc.next()时,它都会等待输入。如果该输入等于您想要的输入,则执行代码。

您可以通过将sc.next()存储在String变量中,然后进行比较来解决此问题。

下面: if (sc.next().equals("1")) 它要求输入。

如果输入为1,则执行代码并打印出--1--。否则,它会跳到这个:if (sc.next().equals("2"))。现在,如果输入为2,则执行打印--2--的代码。否则,它会跳转到if (sc.next().equals("3")),依此类推。

您可以通过以下方式更正此问题:

  • sc.next()存储在String变量中,然后进行比较。
  • 使用switch-case块来比较输入。

答案 1 :(得分:1)

你多次调用 <select name="tamano" ng-model="pizza.initial_prize" class="form-control select"> <option ng-value="0">Seleccionar tamaño</option> <option ng-value="pizza.fam">Familiar</option> <option ng-value="pizza.med">Mediana</option> <option ng-value="pizza.peq">Pequeña</option> </select> - 所以如果输入不是1,它将等待更多输入以查看 next 输入是否为2,等等。致电sc.next()将等待更多输入。它不知道“这不是你要找的输入,所以下次你打电话时我会返回相同的值。”

使用局部变量存储sc.next()

的结果
sc.next()

另外考虑使用switch语句......

答案 2 :(得分:0)

您多次调用sc.next()

解决方案代码:

        Scanner scanner = new Scanner(System.in);
        while(true){
            switch (scanner.next()) {
                case "1":
                    System.out.println("--1--");
                    break;
                case "2":
                    System.out.println("--2--");
                    break;
                case "3":
                    System.out.println("--3--");
                    break;
                case "4":
                    System.out.println("--4--");
                    break;
                case "help":
                    System.out.println("--help--");
                    break;
                default:
                    break;
            }
        }