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 的答案,而不是预期的结果。

4

10 回答 10

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;
 }
于 2013-10-22T09:30:56.750 回答
1

试试这个,

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

for循环,

        for (int j = i; j <= n; j += 2)
        {
            sum = sum + j;
        }
于 2013-10-22T09:33:17.097 回答
1

您在 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;
}
于 2013-10-22T09:33:34.160 回答
1

您的 while 循环有问题。我一变成1就出来了

试试这个

while(i<=n) {
  if(i%2==0)
    sum+=i;
  i++
}
于 2013-10-22T09:35:00.070 回答
0

第一次 i 为奇数(在 1)时,循环将退出

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

因此答案总是零。

你想要循环中 i 的范围,但是 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;
     }
}

当然这有点低效,更好的是跳过所有奇数

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

但是你可以通过公式直接做到这一点,我假设这可能会扩展到更复杂的条件

于 2013-10-22T09:31:11.397 回答
0

我输入的任何内容都会给出 0 的答案,而不是预期的结果。
因为循环结束于i=1

于 2013-10-22T09:31:48.670 回答
0

拆分while循环中的条件。因为您使用了&&运算符,所以这两个语句都必须始终为真。使用i=1,第一个条件失败并且循环被中止。

仅将i<=n置于循环条件中,然后if(i%2)Sum.

while (i<=n)
{
    if (i%2 == 0)
    {
        sum = sum + i;
    }
    i++;
}
于 2013-10-22T09:32:59.937 回答
0

您从 wile 循环中退出子句是错误的。在第二次迭代中,将是 1,并且i%2 == 0将给出错误。有你的问题。

于 2013-10-22T09:33:07.067 回答
0

简单的错误!你有&&循环!所以第一个条件失败了i=1,因此你跳出循环!

于 2013-10-22T09:33:55.443 回答
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);
     }
}
于 2013-10-22T09:37:02.127 回答