简体   繁体   English

计算数组中值的总和

[英]Computing sum of values in array

The problem im getting is that with oddSum the value outputted is the same as evenSum, and the value for sum of all elements is 0.我得到的问题是,用oddSum 输出的值与evenSum 相同,并且所有元素之和的值为0。

I cant quite see where im going wrong as the loops are pretty similar and if the even one works the others should too?我不太清楚我哪里出错了,因为循环非常相似,如果偶数一个有效,其他的也应该?

Here is my code anyway:无论如何,这是我的代码:

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

You are getting same value for even and odd because you are printing the same value: -你得到相同的evenodd数值,因为你打印的是相同的值:-

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

Also, your final sum is zero because you are making out all the elements of your original array as zero , as you are swapping your elements with the elements in evenData and oddData , which are zero initially.此外,您的最终总和zero因为您将原始数组的所有元素都zero ,因为您将元素与evenDataoddData的元素交换,这些元素最初为零。

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

So, you are iterating your array, and assigning 0 to each of your index, while adding the previous element to the new array .因此,您正在迭代数组,并为每个索引分配0 ,同时将前一个元素添加到new array


I would say that you are needlessly using 2 extra array and 3 extra loops.我会说你不必要地使用了 2 个额外的数组和 3 个额外的循环。 Why not just create a sum in the place where you are iterating your original array?为什么不在迭代原始数组的地方创建一个总和?

In fact, all your sums can be computed in a single loop: -事实上,您所有的总和都可以在一个循环中计算:-

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

So, you don't need to create extra arrays for even and odd numbers.因此,您无需为evenodd创建额外的数组。

And, also your 4 loops have now been condensed to just a single loop.而且,您的4 loops现在也已浓缩为一个循环。

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

Looking at your above lines, evenDate is empty and in second line you are setting your data array to be empty.查看上面的行, evenDate 是空的,在第二行中,您将数据数组设置为空。 You are repeating the same mistake in oddDate line as well.您也在oddDate 行中重复了同样的错误。

Why don't you use just try the following?你为什么不使用只是尝试以下?

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

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

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