-1

我正在处理一项将 2 个用户输入之间的所有偶数相加的作业。例子; 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);
4

2 回答 2

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> = num2。这保证了循环将继续进行 1/2 * num2 次迭代。在您的示例 (3,12) 中,您希望循环迭代 5 次 (4+6+8+12),但是您的 while 循环的第二部分是有条件的,它将迭代 6 次(evencount = 0,2, 4,6,8,10)。

于 2013-02-18T00:30:41.363 回答
1

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

您可以尝试确保数字甚至在开始循环之前。那你可以试试

for(int i = yourEvenNumber; i <= num2; i+=2) {
    //add them up here    
}
于 2013-02-18T00:16:23.527 回答