2013-11-20 52 views
0

我正在創建一些簡單的數學計算方法。我有一個方形,立方體和超立方體方法。我試圖創建一個冪方法,當n = 2時,調用方法,當n = 3時,調用立方體方法等。我希望此冪方法返回int k。然而,k的價值似乎並沒有超越if語句。有什麼建議麼?Java製作數學方法

public int power(int x, int n){ 
    int k; 
    if (n==2){ 
     k = square(x); 
    } 
    else if (n==3){ 
     k = cube(x); 
    } 
    else if (n==4){ 
     k = hypercube(x); 
    } 
    else if (n==1){ 
     k = x; 
    } 
    return k; 
} 
+0

當你傳遞'0'的'n'值時會發生什麼? '5'? – rgettman

+0

你是什麼意思,該值沒有超出if語句「'是你的方法返回'0'或任何java默認值int是? –

+0

你是什麼意思_「k的價值似乎沒有超越if語句」_?你怎麼知道的? –

回答

1

使用您的代碼,我從編譯器中得到「錯誤:變量k可能未被初始化」。我猜這就是你的意思。這是因爲,如錯誤所示,如果n不在範圍1 - 4中,則k永遠不會顯式設置爲任何值。下面就來解決這個問題,這使得該方法對於較大的n值工作(只要你不循環過去Integer.MAX_VALUE的)的一種方法:通過年底

public int power(int x, int n){ 
    int k; 
    if (n==2){ 
     k = square(x); 
    } 
    else if (n==3){ 
     k = cube(x); 
    } 
    else if (n==4){ 
     k = hypercube(x); 
    } 
    else if (n==1){ 
     k = x; 
    } 
    else { 
     k = 1; 
     for (int i = 0; i < n; i++) { 
      k *= x; 
     } 
    } 
    return k; 
} 
+0

這似乎工作,雖然當我打電話的方法時,我得到一個紅色的標誌,告訴我必須將power方法設置爲static,不能對非靜態方法進行靜態引用權力法? –

+1

將'power'改爲靜態方法('public static int power')或者在使用它之前創建它所在類的實例。你可能需要使'square','cube'和'hypercube'靜態。 –

+0

創建實例,非常感謝您的幫助 –

0

你可以像這裏一樣使用一個循環(我希望我能理解)。

public int power(int x, int n){ 
    if(n==0) return 1; 
    int k = x; 
    while(--n > 0) { 
     k *= x; 
    } 
    return k; 
} 

您可能還會增加對負電源的支持,但您需要一些其他返回類型(例如float或double)。

但說實話,你爲什麼不用Math.pow()

0

此代碼不會編譯,因爲k尚未初始化,並且您在return k;處得到編譯錯誤。如果要初始化爲0,則在聲明中使用int k=0

0

k將「已知」如果它是沿途分配的方法。也許你強制執行的k沒有無效值可以傳遞,那麼它應該做你想要它做的事情:

public int power(int x, int n){ 
    if (n < 1 || n > 4){ 
     throw new IllegalArgumentException("n is invalid :" + n); 
    } 
    int k = 0; 
    if (n==2){ 
     k = square(x); 
    } 
    else if (n==3){ 
     k = cube(x); 
    } 
    else if (n==4){ 
     k = hypercube(x); 
    } 
    else if (n==1){ 
     k = x; 
    } 
    return k; 
} 

你也應該確保x總是有效的。