2015-08-19 109 views
0

我試圖做一個java程序,需要用戶給出的數字,並顯示它是奇數還是偶數。我有麻煩,我想這可能是我的邏輯錯了。它只是打印出永不落幕的消息,「奇」爲什麼我的偶數和奇數打印程序打印多次打印奇數?

import java.util.Scanner; 

public class Questions { 
    public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    System.out.println("Your number"); 
    int number = input.nextInt(); 
    for (int i = 0; i <= number; i = +2) 
     if (number == i) { 
     System.out.println("even"); 
     } else { 
     System.out.println("odd"); 
     } 
    } 
} 
+1

模運算符。你需要它。 –

回答

1

你有無盡的for語句,因爲你不改變循環變量i。您可以嘗試下面的代碼片段,以決定你的任務:

System.out.println(number % 2 == 0 ? "even" : "odd"); 

System.out.println((number & 1) == 0 ? "even" : "odd"); 

這些線路將給予同樣的結果:

(number = 2) 
even 

當然,在你的情況下,您可能會將此行for (int i = 0; i <= number; i = +2)更改爲下一行for (int i = 0; i <= number; i += 2),但輸出不會給出預期結果:

(number = 2) 
odd 
even 
1

在你的循環中,您有assignement

i =+ 2 

這將變量i正2. 要添加2變量使用:

i += 2 

這隻要i小於輸入值就打印「奇數」,如果該值爲事件,則打印最終的「偶數」,如果該值爲奇數,則打印「奇數」。

順便說一下測試一個值是另一個值的倍數就可以使用

if ((value % otherValue) == 0) {} 

所以在你的榜樣

if ((number % 2) == 0) { 
    System.out.println("even"); 
} else { 
    System.out.println("odd"); 
} 

,甚至更短的

System.out.println((number % 2) == 0 ? "even" : "odd"); 
1

你的支票奇數/偶數是錯誤的並且可以被優化。改爲使用模數運算符:

if (number % 2 == 0) { 
    System.out.println("Even"); 
} else { 
    System.out.println("Odd"); 
} 

模數給出了操作數除法的其餘部分。如果你除以2,餘數爲0 - 你有一個偶數。

1

你犯錯,for語句

for (int i = 0; i <= number; i = +2)// this will not increment the counter, it will set it every time with 2 positive 

for (int i = 0; i <= number; i +=2)// this will increment the counter by 2 in every iteration 

也應儘量找到調試問題,或使用一些打印語句循環之後,或者在條件troubleshot這個問題。

1

該程序永不終止。

for(int i = 0; i <= number; i=+2) 

有問題的代碼是最後一項。2遞增我看起來是這樣的:

i += 2; 

如果你寫這樣的:

i =+ 2; 

那麼它只會重複值「2」分配給我。

當然,正如其他海報已經指出,這不是你應該如何測試均勻/奇怪。您應該執行模數檢查:

if(i % 2 ==) <even> 
else <odd> 

或者只是對最後一位數字進行按位比較。

if(i & 1 == 0) <even> 
else <odd>