我为我的Java类编写了一个程序,我似乎无法弄清楚它做错了什么。我用一个介于1和100之间的25个随机整数填充一个LinkedList。然后我对列表进行排序并输出总和和平均值。然后我删除奇数并输出新列表的总和和平均值。但是,当我进行最后的计算时,它似乎也会添加原始列表中最大的数字。如果第一个列表中的最大数字是偶数,则将它添加两次。
import java.util.Collections;
import java.util.Random;
import java.util.List;
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Collection;
import java.util.*;
public class randomNumberCollection
{
public static void main(String[] args)
{
int count = 0;
//Create LinkedList object
LinkedList<Integer> numList = new LinkedList<Integer>();
Integer nextNum = null;
for (int counter = 0; counter < 25; counter ++)
{
nextNum = new Integer((int)(Math.random() * 100));
numList.add(nextNum);
}
//output random number LinkedList unsorted
System.out.printf("Unsorted -- \n" + "Here are the numbers: \n" + numList);
System.out.println();
System.out.println();
//Sort LinkedList
Collections.sort(numList);
System.out.printf("Sorted -- \n" + "Here are the numbers: \n" + numList);
System.out.println();
//Output sorted list sum and average
ListIterator<Integer> iterator = numList.listIterator();
while (iterator.hasNext())
count += ((Integer) iterator.next()).intValue();
System.out.printf("The sum of the numbers is %d and the average is %.2f ", count, (double) count / numList.size());
System.out.println();
ListIterator <Integer> iterator2 = numList.listIterator();
int listElement = 0;
while(iterator2.hasNext())
{
listElement = (Integer)iterator2.next();
if (listElement %2 == 1)
{
iterator2.remove();
}
}
ListIterator<Integer> iterator3 = numList.listIterator();
while (iterator3.hasNext())
listElement += ((Integer) iterator3.next()).intValue();
System.out.println();
System.out.printf("With the odd numbers removed -- \n" + "Here are the numbers: \n" + numList);
System.out.println();
System.out.printf("The sum of the numbers is %d and the average is %.2f ", listElement, (double) listElement / numList.size());
}
}
答案 0 :(得分:2)
在遍历(sorted)列表以删除奇数后,listElement
保存(已排序)列表的最后一个元素的值。
在最终迭代列表之前,您需要将listElement
重置为零。
最好有一个单独的方法迭代列表,并返回列表中整数的总和。这样可以减少代码重复。
您也不需要Integer
的所有演员阵容。由于ListIterator
是generic type,编译器知道迭代器的next
方法返回Integer
。