2015-11-28 248 views
2

這裏是我的方法:方法沒有返回值

public int power(int x, int n) {  
    switch (n) { 
     case 2: return square(x); 
     case 3: return cube(x); 
     case 4: return hypercube(x); 
    }    
} 

編譯器顯示此信息:

方法斷點:測試儀[進入] - 功率(INT,INT) - 此方法必須返回int類型」消息的結果。

似乎無法找出問題所在。

我知道這是不好的做法,但我被告知不要將值存儲在局部變量中,並在最後返回。

我在這裏錯過了什麼?

+3

你是什麼如果n!= 2,3或4,會發生嗎? – Reimeus

+0

你的程序不會返回任何給''n'的輸入,除了2,3或4以外的任何東西。 –

+1

「我知道這是壞習慣,但我被指示不要將值存儲在局部變量中並返回它最後。」 - 你知道什麼是壞習慣?我在這裏看到的唯一不好的做法是由編譯器錯誤突出顯示的錯誤。可能你應該有一個引發'IllegalArgumentException'的'default'事件。 –

回答

1

一個default情況添加到您的switch

case ...: 
    return ... 
... 
default: 
    return 0; // return some default value in case no other case was executed 

注意,default情況下必須返回一個整數,否則誤差應堅持。

1
public int power(int x,int n){ 

switch (n) { 
case 2: return square(x); 

case 3: return cube(x); 

case 4: return hypercube(x); 

} 
return 0;    

}

我想這是因爲你沒有返回主狀態。開關的情況下可以繞過如果n犯規正確初始化,但是編譯器需要返回值,如果您定義的功率作爲內部功率()... 如果返回0,你就會知道n不初始化以及

4

如果n是其他而不是你的一個案例,什麼都不會返回 - 這正是編譯器所抱怨的。

由於您的實現只能迎合n爲2,3和4,最合適的事情是拋出一個異常:

public int power(int x, int n) { 
    switch (n) { 
     case 2: return square(x); 
     case 3: return cube(x); 
     case 4: return hypercube(x); 
    } 
    throw new IllegalArgumentException("Power must be 2, 3 or 4. Unsupported power: " + n);   
} 

編譯器會那麼滿意,所有的代碼路徑或者返回的東西或拋出異常。

+0

您忘記了'拋出'聲明。思想+1;我從來不知道拋出一個異常可以替代'return'。 –

+0

@jdev作爲'RuntimeException'的IllegalArgumentException不需要被聲明爲拋出,並且一般來說在實踐中沒有聲明。 – Bohemian

0

您必須添加默認的情況下,或開關後恢復(因爲Java的確,如果n不是2,3不是retuns或4):

public int power(int x,int n){ 

    switch (n) { 
    case 2: return square(x); 

    case 3: return cube(x); 

    case 4: return hypercube(x); 

    }    
    return 0; 
} 

public int power(int x,int n){ 

    switch (n) { 
    case 2: return square(x); 

    case 3: return cube(x); 

    case 4: return hypercube(x); 

    default: return 0; 
    }     
}