我是java的新手,但我已经对这个特定的程序做了很多实验,而且我已经碰壁了。此程序的目的是捕获用户是否输入超出变量限制的值,以及验证输入是否满足我指定的范围。
我尝试过使用while循环,我的三个结果就是:
如果我在catch块中放置一个转义,它就像while不在那里一样。我希望程序打印错误,但允许用户重试一个值。
while(!success){
try{
sh = sc.nextShort();
while(sh < 1 || sh > 100){
System.out.print("You must enter a value between 1-100: ");
sh = sc.nextShort();
} //close try
System.out.println("Great job!");
success = true; //escape the while
}catch{Exception ex){
System.out.println("ERROR: " + ex);
success = false; //causes infinite loop... I understand
} //close catch
} //close while
答案 0 :(得分:1)
正如我理解你的问题,你在传递一个更大的价值(更强大的东西,如例如&#34; 10000000000&#34; )时面临一个例外循环。
在无限循环中你有以下例外情况:
ERROR: java.util.InputMismatchException: For input string: "10000000000"
ERROR: java.util.InputMismatchException: For input string: "10000000000"
但您希望程序打印例外行,然后允许用户再次输入。
您可以通过以下方式从您使用的扫描仪中读取错误输入( String bad_input = sc.next();)。
while (!success) {
try {
sh = sc.nextShort();
while (sh < 1 || sh > 100) {
System.out.print("You must enter a value between 1-100: ");
sh = sc.nextShort();
} // close try
System.out.println("Great job!");
success = true; // escape the while
} catch (Exception ex) {
System.out.println("ERROR: " + ex);
success = false; // causes infinite loop... I understand
String bad_input = sc.next();// your bad input to allow read that exception
} // close catch
} // close while
可以找到此问题的原因here:
如果翻译成功,扫描仪将超过输入 匹配
答案 1 :(得分:1)
问题是,Scanner存储整个输入字符串并对其进行处理。 当您的输入不是短值而是字符串时,它会抛出异常。您在catch中记录异常,并在下一个循环中尝试从同一个存储的字符串中读取一个短值,这会再次引发异常.... - &gt;无限循环。
如果您在catch中创建一个新的Scanner,它将再次从控制台读取:
while (!success) {
try {
sh = sc.nextShort();
while (sh < 1 || sh > 100) {
System.out.print("You must enter a value between 1-100: ");
sh = sc.nextShort();
} //close try
System.out.println("Great job!");
success = true; //escape the while
} catch (Exception ex) {
System.out.println("ERROR: " + ex);
sc = new Scanner(System.in);
} //close catch
}
答案 2 :(得分:0)
如果我理解你的问题,你可以摆脱你的第二个while循环,并用if替换它。然后你可以打印出值必须为1-100并抛出异常以使程序通过catch语句并打印出你输出的错误。
IsDisabled