2011-12-08 29 views
0

我有一個java程序應該處理異常,但最終的結果是遠離我的意圖。以下是我的程序的總體思路:假定接受零輸入並退出程序。輸入對話框應該會引起一個應該被捕獲的異常並打印「不良號碼」消息。Java嘗試並趕上

我的大腦告訴我我錯過了catch塊中的一行代碼。

這裏是我的代碼:

import javax.swing.JOptionPane; 


public class exceptTest { 

    public static void main(String[] args){ 
     try { 
      String line = JOptionPane.showInputDialog(null, "enter number"); 
     if(line.equals ("0")); 
     System.exit(0); 
     }catch(Exception e){ 

      JOptionPane.showMessageDialog(null, "bad number"); 
     } 
    } 
} 

回答

1

你是不是在這裏捕獲異常,你只是作出if語句,你可以使用if/else語句。

try{ 
    String line = JOptionPane.showInputDialog(null, "enter number"); 
    if(line.equals ("0")){ 
      System.exit(0); 
    }else{ 
     JOptionPane.showMessageDialog(null, "bad number"); 
    } 
}catch (Exception ex){ 
    ex.printStackTrace(); 
} 

你只會使用任何異常showInputDialog()拋出,但是你的電話號碼檢查你是不是一無所獲,美中不足的,它只是簡單地不爲0

+0

你好BVSmallman,我可以這樣做,它也容易得多。但我的計劃的想法是利用嘗試和捕捉異常,這使得它更具挑戰性。謝謝回覆! –

+0

if語句後面還有一個會導致問題的分號。 –

+0

如果你的目標是捕捉一個異常,那麼你需要在不是0的時候手動拋出一個異常,但是不管你輸入什麼數字它都不會拋出任何東西。 – BVSmallman

0

你有一個分號後你的if語句會終止該行,編譯器不會查找if的其餘部分。刪除你的分號,它會正常工作。如果輸入不等於0。因此

import javax.swing.JOptionPane; 

public class exceptTest 
{ 

    public static void main(String[] args){ 
     try 
     { 
      String line = JOptionPane.showInputDialog(null, "enter number"); 
      if(line.equals ("0")) //semi-colon removed here 
      { 
       System.exit(0); 
      } 
      throw new IllegalArgumentException("Input was not 0"); 
     } 
     catch(Exception e) 
     { 
      JOptionPane.showMessageDialog(null, "bad number"); 
     } 
    } 
} 
+0

你完全正確地擺脫了分號,但單靠這一點不能解決問題(請參閱@ BVSmallman的答案)。 – Mac

+0

這種'作品',但我認爲它不符合OP的目標。 –

+0

@Mac我現在看到了上面的內容,但是即使使用else塊,您仍然無法達到它,因爲分號 –

0

您的代碼不會拋出異常,你永遠也追不上任何東西,因此沒有errormessage的顯示在屏幕上。

你可以做兩件事情:
- 如果輸入不等於0拋出異常(那麼你就會進入捕撈)

- 使用與您ifelse顯示錯誤消息(那麼你不需要try-catch來檢查輸入是否爲0)

編輯:當然,正如Hunter McMillen注意到的那樣,您需要在if語句後刪除分號。

+0

哦,我看到我做錯了什麼,需要添加。感謝我的同事們! –

1

您不會執行您的異常處理代碼,因爲您永遠不會拋出異常。代碼將執行輸入,然後測試輸入等於「0」,然後基於該輸入將顯示或不顯示對話框,然後執行。

拋出異常的發生要麼是因爲在代碼要處理的條件之外發生了什麼,要麼是因爲你明確地拋出了一個。通過「外部條件」等等,我的意思是用0除以0。Java(或任何其他語言)將處理該問題,並拋出異常。程序處理的正常步驟將停止,並且將調用一個執行處理程序。如果你(例如)試圖將輸入解析爲一個數字,但輸入不是數字,你會得到一個異常。這與您所說的功能不同,但是可以更好地說明例外情況。類似於

try 
{ 
int numberEntered = Integer.parse(line); 
JOptionPane.showMessageDialog(null, "Entered a number, parsed to " + numberEntered); 
} 
catch (NumberFormatException nfe) 
{ 
JOptionPane.showMessageDialog(null, "Did not enter a number, but <" + line + ">"); 
} 

顯示了事情例外通常適合的類型。

如果您想要,您可以定義一個異常,將其稱爲BadNumberException,並將其放入您擁有的代碼中 - 您可以將它(我猜)放在if語句的else子句中。但是你的例程會拋出異常,我認爲引發異常的例程也是不尋常的。

希望有所幫助。 rc