2015-08-21 91 views
0
public class SomeClass { 
    int[] table;  
    int size; 

    public SomeClass(int size) { 
     this.size = size;  
     table = new int[size]; 
    } 

    public static void main(String[] args) { 
     int[] sizes = {5, 3, -2, 2, 6, -4}; 
     SomeClass testInst; 

     for (int i = 0; i < 6; i++) { 
      testInst = new SomeClass(sizes[i]); 
      System.out.println("New example size " + testInst.size); 
     } 
    }  
} 

當使用參數-2調用構造函數SomeClass時,將生成運行時錯誤:NegativeArraySizeException。Java中的錯誤處理任務

我正在尋找修改此代碼,以便通過使用try,catch和throw來表現更強健。構造函數應該拋出一個異常,但在用非正面參數調用時什麼也不做。主要方法應該捕獲異常並打印警告消息,然後通過循環的所有六次迭代繼續執行。
有人指着我正確的方向嗎?

回答

0

您需要扔從您的構造SomeClass的異常(最好拋出:IllegalArgumentException)每當你得到一個負數,並在main方法處理它。 你的代碼應該看起來像;

public class SomeClass 
{ 
    int[] table; 
    int size; 

    public SomeClass(int size) 
    { 
     if (size < 0) 
     { 
      throw new IllegalArgumentException("Negative numbers not allowed"); 
     } 
     this.size = size; 
     table = new int[size]; 
    } 

    public static void main(String[] args) 
    { 
     int[] sizes = { 5, 3, -2, 2, 6, -4 }; 
     SomeClass testInst; 
     for (int i = 0; i < 6; i++) 
     { 
      try 
      { 
       testInst = new SomeClass(sizes[i]); 

       System.out.println("New example size " + testInst.size); 
      } 
      catch (IllegalArgumentException e) 
      { 
       System.out.println(e.getMessage()); 
      } 
     } 
    } 
} 
+0

太謝謝你了:)。 – Federer

0

有一些操作,比如使用Socket連接到遠程服務器,它可能會拋出異常例如SocketException。您需要捕捉並處理這些異常情況,因爲在您嘗試連接之前,無法知道它是否會結束。

NegativeArrayException不是這樣的。在嘗試創建數組之前,如果使用負值,可以確定它會失敗。
如果大小來自您的代碼,則應該修復代碼而不是捕獲該異常。
如果它來自任何輸入,您應該在嘗試創建數組之前驗證該輸入並採取相應措施。

假設你的尺寸的數組實際上是輸入一個簡單的例子來對付它會是這樣:其中給出的輸出

public class SomeClass { 

    int[] table; 
    int size; 

    public SomeClass(int size) { 
     this.size = size; 
     table = new int[size]; 
    } 

    public static void main(String[] args) { 
     int[] sizes = {5, 3, -2, 2, 6, -4}; 
     SomeClass testInst; 

     for (int i = 0; i < 6; i++) { 
      if (sizes[i] < 0) { 
       System.out.println("Warning"); 
      } else { 
       testInst = new SomeClass(sizes[i]); 
       System.out.println("New example size " + testInst.size); 
      } 
     } 
    } 
} 

New example size 5 
New example size 3 
Warning 
New example size 2 
New example size 6 
Warning 
+0

非常感謝你:),這確實回答了我的問題:)。 – Federer