繁体   English   中英

我的最终结果与while循环的预期结果不符

[英]My final result doesn't match the intended result for a while loop

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(含2和100)之间的所有偶数之和。

但是,我键入的任何内容都会给出0的答案,而不是预期的结果。

该循环在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;
 }

尝试这个,

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

循环

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

您在while循环中的条件是错误的:

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

它只是将sum和加0,然后退出while循环。 确实在第二次迭代中:

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

使用此代替:

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

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

尝试这个

while(i<=n) {
  if(i%2==0)
    sum+=i;
  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;
}

但是,因为您可以直接通过公式来执行此操作,所以我假设可以将其扩展到更复杂的条件

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

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

仅将i<=n放入循环条件,然后将if(i%2)放在Sum的加法周围。

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

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

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

有几个答案指出,偶数测试是第一次退出。 问题在于两个测试不相关。 您想在达到极限后退出。 而您想要在偶数时添加。 分开两个测试

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);
     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM