java - 链表迭代器添加了太多数字

标签 java listiterator

我为我的 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());
    }


}

最佳答案

迭代(已排序)列表以删除奇数后,listElement 保存(已排序)列表最后一个元素的值。

您需要在列表的最终迭代之前将 listElement 重置为零。

最好有一个单独的方法来迭代列表并返回列表中整数的总和。这将减少代码重复。

您也不需要将所有类型转换为Integer。因为 ListIteratorgeneric type ,编译器知道迭代器的 next 方法返回 Integer

关于java - 链表迭代器添加了太多数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20036095/

相关文章:

java - Eclipse:exec.args 中的 Maven 多参数字符串

java - 无法理解 : if (val == null ? it.next() == null : val. equals(it.next()))

java - 从 Java 列表中删除项目

java - 将列表迭代器传递给 Java 中的多个线程

java - Android 游戏中的列表迭代器

java - 测试完成后如何触发发送 TestNG 可通过电子邮件发送的报告

java - 使用xsl :result-document in Java (Sax)

java - Spring MVC,不可选择元素列表的表单控件

java - do...while 循环出现问题

java - 为什么要在 AbstractList 迭代器的remove()方法中检查if(lastRet <cursor)?