有人能告诉我我的代码有什么问题,如下所示?第一种情况完全正常,但第二种和第三种情况引发了异常:
这是否与案例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)
答案 0 :(得分:0)
案例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;
答案 1 :(得分:0)
Scanner.nextInt()
不会消耗后面的新行。
为什么scan.nextLine()
在第二种情况下调用会消耗\n
,一个新行字符,使得while条件为true
。
因此输入的"0"
仍然没有被消耗并进入operator
,对于运算符意味着的输入将是一个字符串并且不会被scan.nextInt()消耗,这就是错误。
要解决此问题,请在第一次scan.nextLine()
来电后致电scan.nextInt()
。