此代码将从控制台获取用户输入,并根据输入是否为整数转到两个位置之一。捕获异常,然后再次读取它以将其从流中取出来处理。 (不确定Scanner是否算作流,但我知道如果没有input.next(),它将永远不会离开该部分。)
所以我想知道的是,如果我通过某个输入获得MismatchException,我该如何退出循环。我已经测试了if(bad_input == any),结果发现我实际上永远无法实现。我在该块中尝试了一些从未执行过的打印语句。非常感谢任何帮助。
解决
不确定如何解决问题,但这已经解决了。我错误地使用==来检查两个字符串。正确的方法是使用bad_input.equals(“x”)。
public static void main(String[] args){
//read input from console
Scanner input = new Scanner(System.in);
boolean loop = true;
while(loop){
//inputting "1 2 d 1" will evaluate each term separately and output at once
try{
//choice = console input only in INTEGER
int choice = input.nextInt();
System.out.println("Input was " + choice);
} catch (InputMismatchException ex){
//here if input != INTEGER
String bad_input = input.next();
System.out.println("Bad Input: " + bad_input);
//need to figure out how to exit loop!!
if(bad_input == "x"){
loop = false;
return;
}
continue;
}
}
}
答案 0 :(得分:2)
在java中,字符串比较使用等于函数“==”可能无法正常工作
更改
if (bad_input == "x") {
loop = false;
return;
}
要
if (bad_input.equals("x")) {
loop = false;
return;
}
答案 1 :(得分:2)
尝试使用break。
if(condition)
break;
答案 2 :(得分:1)
break;
将立即退出循环。你做的也应该工作。我不确定你是否需要if
语句,当且仅当输入不是整数时,才会执行整个catch块。
答案 3 :(得分:1)
我觉得你需要使用
if(bad_input.equals("x")){
loop = false;
return;
}
==检查相同的参考
.equals检查相同的值
答案 4 :(得分:1)
可能应该使用 equalsIgnoreCase 方法。
if (bad_input.equalsIgnoreCase("x")) {
要以除整数之外的任何值退出循环,您只需使用 break 。
catch (InputMismatchException ex) {
// here if input != INTEGER
String bad_input = input.next();
System.out.println("Bad Input: " + bad_input);
break;
}