-1

私は、2つのユーザー入力の間のすべての偶数を合計する割り当てに取り組んでいます。例; userNum1 = 3、userNum2 =12。2つの数値も加算に含まれます(偶数の場合のみ)。whileループの状態を1時間超えましたが、追加された番号がユーザーの2番目の番号(この場合は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ループの2番目の部分が条件付きの場合、6回繰り返されます(evencount = 0,2、 4,6,8,10)。

于 2013-02-18T00:30:41.363 に答える
1

アルゴリズムが何をする必要があるかを考える必要があります。数が偶数であるかどうかに関係なく、evenSumを増やしていることに注意してください。また、番号が1回でもあるかどうかを確認するだけで済みます。当たり前のように思えるかもしれませんが、数値が偶数であることがわかったら、2を加算すると常に別の偶数になります。コーディングを開始する前にアルゴリズムについて考えるのに時間がかかる場合、アルゴリズムははるかに単純になる可能性があります。

ループを開始する前に、番号が偶数であることを確認してみてください。その後、あなたは試すかもしれません

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