我的扫描仪代码有什么问题?

有人可以告诉我我的代码有什么问题,如下所示? 第一种情况非常好,但第二种和第三种情况引发异常:

这与情况2和3开始时的while循环有什么关系?

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    int option = scan.nextInt();

    switch (option) {
        case 1: int line = scan.nextInt();
                for (int i = 0; i < line; i++){

                    String operator = scan.next();

                    int n1 = scan.nextInt();
                    int n2 = scan.nextInt();

                    Boolean no1 = (n1 == 1) ? true:false;
                    Boolean no2 = (n2 == 1) ? true:false;

                    if (operator.equals("AND")) {
                        int result = (no1 && no2) ? 1:0;
                        System.out.println(result);
                    } else {
                        int result = (no1 || no2) ? 1:0;
                        System.out.println(result);
                    }

                }
                break;
        case 2: while (!scan.nextLine().equals("0")) {
                    String operator = scan.next();

                    int n1 = scan.nextInt();
                    int n2 = scan.nextInt();

                    Boolean no1 = (n1 == 1) ? true:false;
                    Boolean no2 = (n2 == 1) ? true:false;

                    if (operator.equals("AND")) {
                        int result = (no1 && no2) ? 1:0;
                        System.out.println(result);
                    } else {
                        int result = (no1 || no2) ? 1:0;
                        System.out.println(result);
                    }

                }
                break;
        case 3: while (scan.hasNextLine()) {
                    String operator = scan.next();

                    int n1 = scan.nextInt();
                    int n2 = scan.nextInt();

                    Boolean no1 = (n1 == 1) ? true:false;
                    Boolean no2 = (n2 == 1) ? true:false;

                    if (operator.equals("AND")) {
                        int result = (no1 && no2) ? 1:0;
                        System.out.println(result);
                    } else {
                        int result = (no1 || no2) ? 1:0;
                        System.out.println(result);
                    }
                }
                break;
        default: System.out.println("Error");
                 break;
    }
}

线程“main”java.util.NoSuchElementException中的异常

在java.util.Scanner.throwFor(Scanner.java:862)

在java.util.Scanner.next(Scanner.java:1371)

在HelloWorld.main(HelloWorld.java:64)


Scanner.nextInt()不会消耗其后的新行。

这就是为什么在第二种情况下scan.nextLine()调用会消耗n ,一个新的行字符,使得while条件true

因此,输入的"0"仍然没有被消耗,并且会进入operator ,输入意味着运算符将是一个字符串,并且不会被scan.nextInt()消耗,这是错误。

要解决这个问题,请在第一次scan.nextInt()调用之后调用scan.nextLine()


在情况2中:

while (scan.nextLine().equals("0"))

上面的行读取下一行。 然后在下次调用scan.next()您可能没有任何可读的内容。 这就是为什么你得到java.util.NoSuchElementException异常。

在while循环中,检查scan.hasNext() 。 然后在while循环中,读取输入并检查它是否等于0

while (!scan.hasNext()) {
    String operator = scan.next();
    if (operator.equals("0")) break;
    int n1 = scan.nextInt();
    int n2 = scan.nextInt();

    boolean no1 = (n1 == 1) ? true:false;
    boolean no2 = (n2 == 1) ? true:false;

   if (operator.equals("AND")) {
           int result = (no1 && no2) ? 1:0;
           System.out.println(result);
   } else {
           int result = (no1 || no2) ? 1:0;
           System.out.println(result);
   }

}
break;
链接地址: http://www.djcxy.com/p/96095.html

上一篇: What is wrong with my scanner code?

下一篇: Java encountering runtime errors while trying to read text file