2011-04-16 56 views
2

遇到困難我正在爲班級編寫一個直接的機場候機樓風格程序。我超越了作業的範圍,並「試圖」使用Try/Catch塊...JAVA - 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; 
+1

問題是在你的ContainsOnlyLetters代碼。這裏面是什麼? – Aidanc 2011-04-16 16:46:30

+0

看起來像這段代碼試圖歧視R2D2? – Ingo 2011-04-16 16:49:38

+0

我不知道老師爲什麼不教'如何使用調試器。調試器真的是你的朋友。你在使用eclipse嗎?單擊containsOnlyLetters的裝訂線以設置斷點,並使用選項debug作爲應用程序。 – MeBigFatGuy 2011-04-16 16:51:04

回答

10

你似乎誤解了try/catch的目的和機制。

不是用於一般流量控制,更具體的含義是重複該try塊,直到它完成且沒有異常。相反,該塊只運行一次,重點在於只有在引發匹配異常時catch塊纔會執行。

您應該爲您的代碼使用while循環和if子句,而不是try/catch。

+0

哇,我完全錯過了那是他正在試圖做的 – 2011-04-16 16:51:51

+0

哈哈,我只是在輸入這個確切的說法。謝謝,我節省了一些時間。 – 2011-04-16 16:52:28

+0

謝謝。我想Kid_Programmer仍然是一個可以接受的名字。 – 2011-04-16 16:52:45

0

如果生成Throwable或Error,它將不會被您的處理程序捕獲。你可以嘗試捕捉Throwable。

0

你是什麼意思時,你說

當有人進入一個非字母到下面的代碼不會趕上然後返回到try塊就抓......

目前尚不清楚你期望的結果,你是否認爲一旦發現異常,控制就會回到嘗試塊?這不是打算如何工作。

當一個異常被拋出,控制轉移到相應的catch/finally塊,然後向前移動時,殘留在try塊行不執行