2012-08-25 78 views
0

這是來自過去試卷的問題。有5個問題。三是錯誤,將阻止代碼正確運行,另外兩個在聲明和Javadoc中。Java - 某些代碼出錯

我不相信我的答案,但我認爲:

1.方法聲明不應該是無效的,你應該要爲這兩種方法調用返回的雙重價值。你也可以在方法聲明中加雙。然後

2.You需要添加一個return語句

3.添加到存儲值的方法的局部變量。

4.Possibly那麼你就需要@return在Javadoc如果我添加一個return語句

5.Not知道這個錯誤

/** 
* Calculate an expression a*x^n. 
* @param a the multiplying factor 
* @param x the number to be raised to a power 
* @param n the power 
*/ 
//original code 
public void aPower(double a, double x, double n) { 

    if (n % 2 == 0) { 
     aPower(a, x * x, n/2); 
    } else { 
     aPower(a * x, x * x, n/2); 
    } 

} 

/** 
* Calculate an expression a*x^n. 
* @param a the multiplying factor 
* @param x the number to be raised to a power 
* @param n the power 
* @return the answer to the expression 
*/ 
//modified code 
public double aPower(double a, double x, double n) { 
    double temp = 1.0; 

    if (n % 2 == 0) { 
     temp = aPower(a, x * x, n/2); 
    } else { 
     temp = aPower(a * x, x * x, n/2); 
    } 
    return temp; 

} 
+0

你不需要臨時變量;你可以直接返回。 – Joey

+0

我不明白你的意圖。在你修改後的代碼中,如果n是偶數,你將覆蓋'temp'。有些事情似乎並不正確。 – Makoto

+0

你有什麼錯誤? – SiB

回答

2

任何遞歸方法至少需要

  • 遞歸步驟。 (你有)
  • 終止條件。失蹤。

你的終止條件將在這裏爲正的情況下,瑣碎= 1或N = 0

聲明是不是僅僅返回類型更多的方式有問題。我建議一個

double aPower(double a, double x, int n) 

而且這種方法似乎需要需要n> = 0,所以這應該被添加爲JavaDoc中的一個先決條件。這樣%操作更有意義。所以從本質上講,缺件是

double aPower(double a, double x, int n){ 
    if (n == 0) return 1.0; 
    if (n == 1) return a*x; 
+0

謝謝你,我會添加一個終止條件,並應該至少處理其中一個錯誤。 – nsc010

+0

@ nsc010你提到的五個問題是減去局部變量。在這裏你可以得到兩個(int n +終止)=> 5。 –