1

私が得ている問題は、oddSumで出力される値がevenSumと同じであり、すべての要素の合計の値が0であることです。

ループがかなり似ているので、どこが間違っているのかよくわかりません。

とにかく私のコードは次のとおりです。

int evenData[] = new int [10];
int oddData[] = new int [10];
int sum = 0;
int evenSum = 0;
int oddSum = 0;

int[] data = {3, 2, 5, 7, 9, 12, 97, 24, 54};
for(int index = 0; index < data.length; index++)
{
    if (data[index] % 2 == 0)
    {

        int temp = data[index];
        data[index] = evenData[index];
        evenData[index] = temp;

    }

    else
    {
        int temp = data[index];
        data[index] = oddData[index];
        oddData[index] = temp;
    }

}
for(int evenIndex = 0; evenIndex < evenData.length; evenIndex++)
{

    evenSum =evenData[evenIndex] + evenSum;

}
System.out.print("Sum of even elements: " + evenSum);

for(int oddIndex = 0; oddIndex < oddData.length; oddIndex++)
{

    oddSum = oddData[oddIndex] + oddSum;

}
System.out.print("Sum of odd elements: " + oddSum);

for(int index = 0; index < data.length; index++)
{
    sum = data[index] + sum;
}
System.out.print("Sum of all elements: " + sum);
4

2 に答える 2

2

even同じ値を出力しているため、と で同じ値を取得してoddいます: -

System.out.print("Sum of odd elements: " + evenSum);

また、最終的な合計はzero、元の配列のすべての要素を として作成しているためです。これは、最初はゼロであるおよびzeroの要素と要素を交換しているためです。evenDataoddData

int temp = data[index];
data[index] = evenData[index]; // This code assigns a value 0 to current index.
evenData[index] = temp;

したがって、配列を反復0し、各インデックスに割り当てながら、前の要素をnew array.


不必要に 2 つの余分な配列と 3 つの余分なループを使用していると思います。元の配列を反復している場所で合計を作成しないのはなぜですか?

実際、すべての合計は 1 つのループで計算できます。

for(int index = 0; index < data.length; index++)
{
    sum += data[index];

    if (data[index] % 2 == 0)
    {
        // int temp = data[index];
        // data[index] = evenData[index];
        // evenData[index] = temp;

        evenSum += data[index];
    }
    else
    {
        // int temp = data[index];
        // data[index] = oddData[index];
        // oddData[index] = temp;

        oddSum += data[index];  
    } 
}

System.out.println("Even Sum: "  + evenSum);
System.out.println("Odd Sum: "  + oddSum);
System.out.println("Total Sum: "  + sum);

evenしたがって、とoddの数値用に追加の配列を作成する必要はありません。

また、4 loops1 つのループに凝縮されています。

于 2012-11-20T20:27:49.300 に答える
0
int temp = data[index]; 
data[index] = evenData[index]; 
evenData[index] = temp; 

上記の行を見ると、evenDate は空で、2 行目ではデータ配列を空に設定しています。oddDate 行でも同じ間違いを繰り返しています。

以下を試してみませんか?

    for(int index = 0; index < data.length; index++)
    { 
        if (data[index] % 2 == 0) { 
            int temp = data[index]; 
            evenData[index] = temp;

        } else { 
            int temp = data[index]; 
            oddData[index] = temp; } 
        } 
    }

    for(int evenIndex = 0; evenIndex < evenData.length; evenIndex++) 
    { 
        //since length of all 3 data,even, odd arrays are the same
        //you can put both sum operation in one for loop

        evenSum = evenData[evenIndex] + evenSum; 
        oddSum = oddData[evenIndex] + oddSum; 
        sum = data[evenIndex] + sum;  
    }

    System.out.print("Sum of even elements: " + evenSum); 
    //you have put evenSum for below odeUm printing in ur code
    System.out.print("Sum of odd elements: " + oddSum); 
    System.out.print("Sum of all elements: " + sum); 
于 2012-11-20T20:46:25.363 に答える