我正在为课堂写一个直接的机场航站楼风格的课程。我超出了作业范围并“尝试”使用Try / Catch块......
然而,Java现在就是那个人。
问题是当有人在下面的代码中输入一个非字母时它没有捕获然后返回它捕获的try块......
为什么呢?
编辑 - 还有containsOnlyLetters方法有效,除非有人认为可能是错误吗?
System.out.println("\nGood News! That seat is available");
try
{//try
System.out.print("Enter your first name: ");
temp = input.nextLine();
if (containsOnlyLetters(temp))
firstName = temp;
else
throw new Exception("First name must contain"
+ " only letters");
System.out.print("Enter your last name: ");
temp = input.nextLine();
if (containsOnlyLetters(temp))
lastName = temp;
else
throw new Exception("Last name must contain"
+ " only letters");
}//end try
catch(Exception e)
{//catch
System.out.println(e.getMessage());
System.out.println("\nPlease try again... ");
}//end catch
passengers[clients] = new clientInfo
(firstName, lastName, clients, request, i);
bookSeat(i);
done = true;
答案 0 :(得分:10)
您似乎误解了try / catch的目的和机制。
它不用于一般流控制,更具体地说,意思是不重复尝试块直到它完成而没有异常。相反,该块只运行一次,重点是只有在抛出匹配的异常时catch块才会执行。
您应该为代码使用while
循环和if
子句,而不是尝试/ catch。
答案 1 :(得分:0)
如果生成了Throwable或Error,则处理程序不会捕获它。你可以尝试捕捉Throwable。
答案 2 :(得分:0)
当你说
时,你是什么意思当有人在下面的代码中输入非字母时,它没有捕获,然后返回它捕获的try块...
目前尚不清楚你期望的结果,你是否认为一旦发现异常,控制权将重新进入try块?这不是它的工作方式。
当抛出异常时,控件转到相应的catch / finally块然后向前移动,try块中的剩余行不会被执行