2012-09-10 39 views
0

我在寫一個方法來檢查數組中包含的奇數個數。這個想法是我使用for循環來測試一個數字是否是奇數,如果是,它會將變量b加1,然後返回b作爲機率。我寫的是這樣的:使用for循環來測試數字是否是奇數

for (int a = 0, b = 0; values[a]%2==1;a++){ 
b++; 
} 

return b; 

,但它給我一個錯誤「返回b; ^ B不能得到解決」。

我在做什麼錯?

+0

讀'甲骨文爪哇Tutorial' – adatapost

+1

的b的外循環沒有範圍,定義INT B = 0,環(它是一個基本的東西)之前。 – roni

+0

順便說一句:'values [a]%2 == 1'測試一個數字是奇數和正數。如果你想讓所有奇數都使用'values [a]%2!= 0' '-1%2'是'-1' –

回答

0

您不需要b值來確定是否需要檢查數組的末尾。你有什麼相似的東西

for (int a = 0; a < values.length;a++) 
    if(values[a]%2!=1) 
     return a; 

// currently throws an exception. 

你可能打算計算奇數值的數量,看起來像這樣。

int count = 0; 
for (int a = 0; a < values.length;a++) 
    if(values[a] % 2 !=0) 
     count++; 
return count; 

int count = 0; 
for (int v: values) 
    count += v & 1; 
return count; 
2

變量b在for語句中定義,並且只在該代碼塊中可見。

試試這個

int b = 0; 
for (int a = 0; values[a]%2==1;a++){ 
b++; 
} 

return b; 
+0

擊敗了我第二次:) – kostja

2

你b在你的循環範圍定義 - 它不是你的回報可見outisde。您可以像這樣重寫:

int b = 0 
for (int a = 0; values[a]%2==1;a++){ 
b++; 
} 

return b; 
1

當您嘗試訪問您定義的範圍之外的變量時,此錯誤即將到來。

// b is defined in this scope and available here only 
for (int a = 0, b = 0; values[a]%2==1;a++){ 

    b++; 
} 

// Nothing as b is available outside scope 
return b; 

要解決此問題,只是在更大範圍內聲明b

int b=0; 
for (int a = 0; values[a]%2==1;a++){ 
    b++; 
} 

return b; 
1

其他答案指出是什麼導致你的編譯錯誤。還應該指出,算法是錯誤的。問題是循環終止第一次values[a]%2==1false。換句話說,它計算第一個偶數之前的奇數,而不是奇數的總數。

+0

是的,這是我發現,即使我可以得到它編譯。我該如何解決這個問題?如果/ else語句? – shewontreply

+0

是的。這是簡單的方法。我不會給你這些代碼,因爲你可以通過爲自己工作而學到更多東西。 –

+0

絕對。謝謝您的幫助! – shewontreply

相關問題