我的扫描仪代码有什么问题?
有人可以告诉我我的代码有什么问题,如下所示? 第一种情况非常好,但第二种和第三种情况引发异常:
这与情况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