2016-07-22 66 views
0

好吧,所以我有一個switch語句的方法,但我忽略了其餘的情況,因爲它們並不重要。在我的主要方法中,調用操作符方法並在while循環中傳遞參數「selection」,直到它們選擇「Q」。如何拋出不會終止我的程序的IllegalArgumentException?

當用戶輸入一個負數時,它應該拋出一個異常,打印一條消息並忽略它們的輸入,然後循環回到開頭。當拋出這個異常時,它終止程序。任何幫助將非常感激。謝謝!

public static void operator(String selection) throws IllegalArgumentException{ 
    Scanner input = new Scanner(System.in); 
    double price; 
switch(selection){ 
case "A": 
    System.out.println("Enter the price"); 
     if(input.nextDouble()<0){ 
      throw new IllegalArgumentException("Price cannot be a negative value"); 
     } 
     else{ 
      price = input.nextDouble(); 
     } 
break; 

case"Q": 
    System.exit(0); 
} 
} 
+0

您應該在您的呼叫班級處理例外 –

回答

1

一個IllegalArgumentException自RuntimeException繼承的,因爲它沒有阻止你的程序,你可以只使用一個簡單的try {}趕上{}但我不建議這樣做,與運行時異常。如果是這種情況,請創建自己的從java.lang.Exception繼承的Exception。

您可以在這裏使用try catch。

像這樣的東西應該工作:

public static void operator(String selection) { 
Scanner input = new Scanner(System.in); 
double price; 
switch(selection){ 

case "A": 
System.out.println("Enter the price"); 
    try { 
     if(input.nextDouble()<0) { 
      throw new NegativePriceException(); 
     } 
    } catch (NegativePriceException e) { 
     System.out.println("The price can't be negative."); 
     e.printStackTrace(); 
    } 

    price = input.nextDouble(); 
    break; 

case"Q": 
    System.exit(0); 
} 
} 

而爲了讓自己的異常類,你基本上需要從Exception繼承(如果你想用它嘗試捕捉)或自RuntimeException繼承(如果你想它停止運行程序),如下所示:

public class NegativePriceException extends Exception { 

    public NegativePriceException() { 
    super(); 
    } 
} 
+0

非常感謝您回覆如此迅速。這確實有效,但是,如果輸入無效,我需要拋出異常。我認爲創建自定義例外將是我最好的選擇。儘可能讓你走向正確的方向嗎? –

+0

增加了如何創建自己的異常和編輯代碼來使用try catch而不是while。 – Julian

+0

你一直是一個巨大的幫助!謝謝 –

1

Java要求您處理或聲明所有異常。如果你沒有使用try/catch塊處理異常,那麼它必須在方法的簽名中聲明。

在main方法,你應該處理異常

public static void main(String args[]) { 
//codes 
try{ 
operator("A"); 
} 
catch(IllegalArgumentException e){ 
e.printStackTrace(); 
} 
} 
+0

非常感謝!這個效果很好 –

+0

你很歡迎:) –

0

您已經接到關於如何處理異常一些很好的答案。

爲你的情況,我不認爲一個例外是適當的。你應該完全擺脫這個異常,並通過打印錯誤信息並要求輸入新的內容來處理問題輸入。

例外情況是出於特殊情況,它們不應該是您的代碼正常執行的一部分。