2012-08-11 33 views
0

我被困在一個模擬考試問題上。什麼是java中的非防禦方法?

我寫了下面的類,它的工作原理。但是,在powN方法的內部,我需要使用一個for(){}循環。此外,我需要使用powN的非防禦性定義。

這是我的問題。我如何使用for循環?什麼是非防禦性方法,如何在powN中使用?

public class Power { 
    private double x = 0; 

    Power(double x) { 
     this.x = x; 
    } 

    public double getX() { 
     return x; 
    } 

    public double powN(int n) { 
     return Math.pow(getX(), n); 
    } 

    public static void main(String[] args) { 
     Power p = new Power(5.0); 
     double d = p.powN(2); 
     System.out.println(d); 
    } 
} 
+0

是非防禦性的位,只是爲了使用異常來捕獲流氓數據呢? – nsc010 2012-08-11 20:00:45

+0

防禦性/非防禦性:http://www.doc.ic.ac.uk/~ar3/lectures/IndustrialMaster/SoftwareEngineering/L5/Lecture5.pdf(幻燈片16) – 2012-08-11 20:02:47

+0

感謝您的鏈接 – nsc010 2012-08-11 20:08:18

回答

1

我讀過有關防禦性/非防禦性從材料進場的幻燈片。我想你的教授希望你檢查參數是否有效。像這樣:

public double powN(int n) { 
    if (n < 0) { 
     throw new UnsupportedOperationException("Only positive values are supported"); 
    } 
    double tmp = 1; 
    for (int i = 0; i < n; i++) { 
     tmp = tmp * getX(); 
    } 
    return tmp; 
    } 
2

我的問題是我怎麼能使用一個for循環

我不熟悉Java語法,但這個想法是:

public double powN(int n) { 

    double tmp=1; 
    for (int i=0;i<n;i++) { 
     tmp=tmp*getX(); 
    } 
    return tmp; 
} 

不知道什麼非防守手段

+0

不會編譯 - tmp應該是雙倍的。 – evg 2012-08-11 20:43:02

+0

謝謝。編輯。我沒有檢查getX()返回的內容。 – Gir 2012-08-11 20:52:53

1

非防守就意味着你不是專門編碼來檢查錯誤,比如我f n == 0,返回0.

取而代之,你只需要取任何n並在for循環中使用它的值。

因此,不要使用內置的數學函數,只需編寫一個For循環來做同樣的事情。

double result = 0.0 
for (int i = 0; i < n; i++) { 
    result = result * x; 
} 
+0

'result = 1;'在init。然後'result = result * x;'在循環中 – Gir 2012-08-11 20:06:53

+0

'result = x * x;'那麼你只計算正方形? – 2012-08-11 20:07:45

+0

我同意吉爾。我有我的數學像往常一樣錯... – Logan 2012-08-11 20:12:57

相關問題