0

我正在尝试通过实现我用来对数组进行排序的类似算法来对 ArrayList 进行排序。我知道我可以使用 Collects.sort,但由于我还是初学者,我宁愿编写代码并学习它。比较存储在数组列表中的两个整数对象的值。这是我的代码,其中通过引用此方法将分数数组作为参数传递。现在这段代码没有正确排序,而是在数组中的所有下标处插入最小的数字。在旁注中,我很好奇如何使用 compareTo() 方法比较索引 j 和索引最小的分数,因为我正在比较对象而不是基元,我觉得这将是比强制转换更好的解决方案。谢谢!

        int smallest;
    for (int i = 0; i < 5; i++)
    {
        smallest = i;
        for (int j = i; j < scores.size(); j++)
        {
            if ((Integer) scores.get(j) < (Integer) scores.get(smallest))
                smallest = j;
        }

        int temp = (Integer) scores.get(i);
        int swap = (Integer) scores.get(smallest); 
        scores.add(i, swap);
        scores.add(smallest, temp);

    }
4

1 回答 1

0

现在这段代码没有正确排序,而是在数组中的所有下标处插入最小的数字。

您需要使用set()方法而不是add()替换元素。

在旁注中,我很好奇如何使用 compareTo() 方法比较索引 j 和索引最小的分数,因为我正在比较对象而不是基元,我觉得这将是比强制转换更好的解决方案

您可以通过为集合指定显式类型来轻松避免强制转换,例如new ArrayList<Integer>.

将所有这些聚集在一起是更正后的代码:

    ArrayList<Integer> scores = new ArrayList<Integer>();
    scores.add(5);
    scores.add(4);
    scores.add(2);
    scores.add(1);
    scores.add(3);
    System.out.println(scores);
    int smallest;
    for (int i = 0; i < scores.size(); i++)
    {
        smallest = i;
        for (int j = i; j < scores.size(); j++)
        {
            if (scores.get(j) < scores.get(smallest))
                smallest = j;
        }

        int temp = scores.get(i);
        int swap = scores.get(smallest);
        scores.set(i, swap);
        scores.set(smallest, temp);

    }
    System.out.println(scores);
于 2013-09-21T20:15:52.717 回答