的陣列中,我得到一個錯誤信息說:方法返回奇數數目的整數
此方法必須返回一個int類型的結果。
我的代碼:
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0) {
countOdd++;
return countOdd;
}
}
}
的陣列中,我得到一個錯誤信息說:方法返回奇數數目的整數
此方法必須返回一個int類型的結果。
我的代碼:
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0) {
countOdd++;
return countOdd;
}
}
}
編譯器認爲該方法可能不會返回任何東西:
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0){
countOdd++;
return countOdd;
}
}
// what if this line is reached?
}
假設你values.length = 0
運行它。該方法將返回什麼?
你return
說法應該是在不同的地方在代碼
下面一行
return countOdd;
應該是你的循環之外。
否則,當您到達第一個奇數時,您將返回1,或者如果沒有可能性,則根本無法返回聲明。
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0) {
countOdd++;
}
}
return countOdd;
}
如果values
陣列中有沒有奇數,那麼你的函數退出不返回int
。如前面的答案所述,將return
語句從循環中移出。
同時,由於的值是0爲偶數,1個用於奇數,奇號的數目等於所述總和超過i
,允許你顯著縮短的代碼:
public int countOdds (int[] values) {
int i, count=0;
for (i=0; i<values.length; ++i) {
count += values[i]%2;
}
return count;
}
另一種版本使用按位與:
public int countOdds (int[] values) {
int i, count=0;
for (i=0; i<values.length; ++i) {
count += values[i] & 1;
}
return count;
}
假如if語句永遠返回true,將方法返回什麼?不,它不會,所以你需要包含一個return語句,它將在if語句從不運行的情況下執行。
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0) {
countOdd++;
}
}
return countOdd;
}
或者如果'values'中的所有項都是偶數? – chepner 2013-04-29 22:10:07