【发布时间】:2018-02-10 13:55:41
【问题描述】:
我是 Java 新手,但我已经对这个特定程序进行了很多实验,但我碰壁了。该程序的目的是捕捉用户输入的值是否超过变量限制,并验证输入是否满足我指定的范围。
- 如果输入超过变量限制而没有 while 循环,则程序退出。
- 如果输入超出了 while 循环的变量限制,则会无限循环。
我尝试过使用 while 循环,我的三个结果是这样的:
- 用户输入一个程序员指定的有效数字,一切正常。
- 用户输入一个大于 100 的数字,系统会提示您重试...
- 用户超出变量限制,程序进入 无限循环。
如果我在 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
【问题讨论】:
-
我不确定我是否理解您的问题,但我怀疑您的问题是 try 块中的第一个 `sh = sc.nextShort();`。如果这就是你的所有代码,我作为用户就不会知道我必须输入一些东西,所以我会等待程序打印一些东西,然后程序会等待我的输入——典型的死锁。我怀疑发生错误时也会发生同样的情况,即它打印错误然后再次启动外部循环的主体,该主体从等待输入数字开始。一个简单的“修复”是在打印错误后打印“再试一次:”之类的内容。
-
问题是,当抛出异常时,它会无限循环错误消息。我按照下面的帖子创建了一个新的“再试一次:”提示和扫描仪。它很实用,但我仍然需要学习很多才能准确了解正在发生的事情。感谢您的建议!
标签: java validation exception input while-loop