我得到的问题是,使用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);
您将获得相同的价值,even并且odd因为您正在打印相同的价值:-
even
odd
System.out.print("Sum of odd elements: " + evenSum);
此外,您的最后一笔是zero因为你在做你原有的数组的所有元素zero,因为你是在要素交换的元素evenData和oddData,这是初始值为0。
zero
evenData
oddData
int temp = data[index]; data[index] = evenData[index]; // This code assigns a value 0 to current index. evenData[index] = temp;
因此,您要迭代数组,并分配0给每个索引,同时将上一个元素添加到中new array。
0
new array
我会说,您不必要地使用了2个额外的数组和3个额外的循环。为什么不只是在迭代原始数组的地方创建一个和?
实际上,所有的总和都可以在一个循环中计算:-
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 loops现在也已被压缩为一个循环。
4 loops