2013-10-22 26 views
0
import java.util.Scanner; 
public class CHP4Ex 
{ 
    public static void main(String[] args) 
    { 
      Scanner scan = new Scanner(System.in); 
      System.out.println("enter a n: "); 
      int n = scan.nextInt(); 
      int i=0; 
      int sum=0; 
      while ((i%2 == 0 && i<=n)) 
      { 
      sum = sum + i; 
      i++; 
      } 
      System.out.println(sum); 
    } 
} 

我想匹配預期的結果: 寫一個循環,計算2至100(含)之間的所有偶數的總和。我的最終結果不一會兒循環

但是,我輸入的任何內容都會給出0代替預期結果的答案。

+2

'while((i%2 == 0 && i <= n))'當sum = 0時停在i == 1處。您應該只在這裏保留'i <= n'並在增加總和時加上'i%2 == 0'的條件。 – joval

+0

好吧有道理。我++確保迭代進行?我希望迭代在i <= n時結束,而不是while循環完全讀取false。 –

+0

@AdamStaples這就是while循環所做的事情,只要條件成立就循環,你想分開你的條件 –

回答

0

幾個答案都指出,即使測試退出第一次。問題是這兩個測試不相關。當你達到極限時你想退出。而且你甚至想要添加。分開兩個測試

import java.util.Scanner; 

public class CHP4Ex 
{ 
    public static void main(String[] args) 
    { 
      Scanner scan = new Scanner(System.in); 
      System.out.println("enter a n: "); 
      int n = scan.nextInt(); 
      int i=0; 
      int sum=0; 
      while (i<=n) 
      { 
       if (i%2 == 0) 
       { 
        sum = sum + i; 
       } 
       i++; 
      } 
      System.out.println(sum); 
    } 
} 
1

該循環停止在I = 1,因此你的結果:

while ((i%2 == 0 && i<=n)) { //when i = 1, i%2!=0 -> stop 
    sum = sum + i; 
    i++; 
} 

應該使用一個for循環:

for(int i=0;i<n;i+=2) { 
    sum+=i; 
} 
0

第一次i是奇數(在1)的循環將退出

while ((i%2 == 0 && i<=n)) <<- i%2 == 0 causing problems 

因此答案總是爲零。

你想在循環中我的範圍,但在if語句中的條件均勻;所以

 while (i<=n) 
     { 
     if (i%2 == 0){ 
      sum = sum + i; 
     } 
     i++; 
     } 

雖然理所當然的for循環會更適合通過一系列

for(int i=0;i<n;i++){ 
    if (i%2 == 0){ 
      sum = sum + i; 
    } 
} 

當然這有點inefficent,運行更好,但只是跳過所有的奇數

for(int i=0;i<n;i+=2){ 
    sum = sum + i; 
} 

但是,正如你可以直接通過公式做到這一點,我假設這可能會擴展到更復雜的條件

0

我輸入的任何內容都會給出0而不是預期結果的答案。
因爲循環結束於i=1

0

在While循環中拆分條件。因爲你使用了運算符,所以這兩個語句都必須始終爲真。在i = 1時,第一個條件失敗,循環中止。

在循環條件中僅放入i < = n,然後將(i%2)置於Sum的相加周圍。

0

您的退出條款從wile循環是錯誤的。在第二次迭代將1,和i%2 == 0將給虛假。有你的問題。

1

試試這個,

 while (i <= n) 
     { 
      if (i % 2 == 0) 
      { 
       sum = sum + i; 
      } 
      i++; 
     } 

for循環,

 for (int j = i; j <= n; j += 2) 
     { 
      sum = sum + j; 
     } 
+0

完美。 從不同的答案我喜歡這種方法和For循環方法。這實際上把我的想法完全融入正確的語法。 –

0

您在while循環條件是錯誤的:

while ((i%2 == 0 && i<=n)) ... 

它只是增加0至sum,然後退出while循環。事實上,在第二次迭代:

i % 2 == 0 // i = 1; 1 % 2 == 0 is FALSE 

使用這個代替:

sum = 0; 
for (int i = 0; i <= n; i+=2) { 
    sum += i; 
} 
0

簡單的錯誤!你有&&循環!所以第一個條件失敗i=1,因此你打破循環!

1

你的while循環有問題。剛一出來,我變成1

試試這個

while(i<=n) { 
    if(i%2==0) 
    sum+=i; 
    i++ 
}