虽然它应该是循环条件没有停止

时间:2013-02-18 00:04:02

标签: java loops while-loop conditional-statements

我正在进行一项任务,将两个用户输入之间的所有偶数相加。例; userNum1 = 3,userNum2 = 12.这两个数字也包含在加法中(仅当偶数时)。 我已经超过了我的while循环条件一小时,似乎无法弄清楚当添加的数字号码击中用户的第二个数字(在这种情况下为12)时,为什么它不会停止。

这是我的代码。

int evenCount = 0;
int evenSum = 0;
int oddNumberFixer = 0;
int evenAddNumber = 0;

while (evenAddNumber <= num2 || evenCount < num2)
    {   
        oddNumberFixer = num1 + 1;

        if ((num1 % 2) != 0)
        {

            evenAddNumber = oddNumberFixer + evenCount;

            evenSum = evenAddNumber + evenSum;
            evenCount = evenCount + 2;



        }
        else 
        {
            evenAddNumber = num1 + evenCount;
            evenSum = evenAddNumber + evenSum;
            evenCount = evenCount + 2;

        }

    }
    System.out.println("The sum of the included evens is " + evenSum);

2 个答案:

答案 0 :(得分:1)

您需要考虑算法需要做什么。请注意,无论您的号码是否均匀,您都会增加evenSum。此外,您只需要检查一个数字是否只有一次。这看起来很明显,但是一旦你知道一个数字是偶数,加2将总是给你另一个偶数。如果你在开始编码之前花了更多的时间来考虑它,那么算法会简单得多。

您可以尝试在开始循环之前确保数字是均匀的。然后你可以尝试

for(int i = yourEvenNumber; i <= num2; i+=2) {
    //add them up here    
}

答案 1 :(得分:1)

我不确定你为什么使用while循环,这看起来像for循环类型的应用程序。如果你做了一些初始化,确保第一个数字是你想要添加的第一个偶数,你可以一次逐步进入2,即:

int first = num1;

if(first % 2 == 1)
    first++;

for(int i = first; i <= num2; i += 2)
{
    //summing code
}

至于你的while循环,我怀疑是因为条件中的OR语句允许循环继续,直到evencount&gt; = num2。这保证了循环将继续进行1/2 * num2次迭代。在你的例子中(3,12),你期望循环迭代5次(4 + 6 + 8 + 12),但是你的while循环的第二部分是条件的,它将迭代6次(evencount = 0,2, 4,6,8,10)。