2015-10-29 32 views
1

這是用於我正在處理的任務。其中一個要求是向SomeClass添加前置和後置條件。我仍然在學習什麼樣的條件,但更重要的是,我該如何實現它們?使用斷言添加前置和後置條件

原始的賦值問題在這裏:「編寫一個程序,顯示一個構造函數將有關構造函數失敗的信息傳遞給異常處理函數定義類SomeClass,它在構造函數中引發一個異常,程序應該嘗試創建一個類型的對象SomeClass的,趕上這是一個從構造函數拋出的異常。

import java.util.Scanner; 

public class Demo3 { 
    public static void main(String[] args) { 
     Scanner scan=new Scanner(System.in); 
     System.out.println("Enter a number between 0 and 10:"); 
     int a=scan.nextInt(); 
     System.out.println("Enter another number between 0 and 10:"); 
     int b=scan.nextInt(); 
     SomeClass testException; 
     try 
     { 
      testException = new SomeClass(a,b); 
     } 
     catch(Exception e) 
     { 
      System.out.println("Exception occurred: "+e.getMessage()); 
     } 
    } 
} 

public class SomeClass { 
    int a; 
    int b; 
    public SomeClass (int a, int b) throws Exception { 
     assert (a >= 0 && a <= 10) : "bad number: " + a; 
     if(a<0 || a > 10){System.out.println("Try again!");} 
     assert (b >= 0 && b <= 10) : "bad number: " + b; 
     if(b<0 || b > 10){System.out.println("Try again again!");} 
     throw new Exception("You've got an error!"); 
    } 
} 
+0

它預計會做什麼? –

+0

最初的任務是張貼在上面,但你的猜測和我的一樣好......基本上我需要創建一個在構造函數中引發參數的程序,並且具有前置和後置條件。歡迎任何建議! – user136720

回答

0

assert語句將失敗拋出AssertionError。 然而,assert語句必須手動使用JVM參數, 啓用,因爲它們是默認關閉的生產代碼 這不適合你的任務。

如果您的要求是拋出AssertionError,那麼你就可以拋出明確:

public SomeClass (int a, int b) { 
    if (a < 0 || a > 10) { 
     throw new AssertionError("the first param is out of valid range: " + a); 
    } 
    if (b < 0 || b > 10) { 
     throw new AssertionError("the second param is out of valid range: " + b); 
    } 

    // at this point the pre-conditions have been validated 
    this.a = a; 
    this.b = b; 
} 

我省略了throws條款,因爲AssertionError不是checked異常,沒有必要申報。

最後,在您的代碼中,作爲構造函數的最後一個語句的throw new Exception("You've got an error!");將始終運行,即使參數是正確的。所以那個陳述在那裏沒有任何意義。

+0

這項任務只需要完成2個班; Demo3和SomeClass。添加一個IllegalRangeException類是有道理的,但是3個類不在需求之內。 但是,我仍然對前期和後期條件感到困惑,這段代碼是否滿足了他們的要求? – user136720

+0

我更新了我的帖子。前提條件是a和b在指定的範圍內,並且這些都是有效的。但這裏沒有後置條件。後置條件會是這樣的,某些計算的結果保證在一定範圍內。但是我們在這裏沒有計算,輸出和假設來編寫後置條件斷言。另外,我用AssertionError替換了IllegalArgumentException,因爲這可能是作業的要求 – janos

+0

非常感謝您的幫助! 因此,對於後期條件說我想檢查'a + b = c'是否在一定範圍內,然後輸出異常或結果。這是否符合崗位條件要求? – user136720

相關問題