编写一个对Numbers的ArrayList进行排序的方法

时间:2017-08-09 10:33:56

标签: java sorting arraylist

从Liang的简介到Java编程(第10版):

练习13.3: 编写以下方法对数组的ArrayList进行排序。

Border

我的代码:

public static void sort(ArrayList<Number> list)

在main方法中,我实例化了一个数字的ArrayList和一些任意值:[7,1,3.14,-5,2,5.187,9,6.66667,4.1]

使用我的排序方法后的输出:[ - 5,9,7,6.6667,5.187,3.14,2,1,4.1](显然不正确)。

现在已经很晚了,我很难弄清楚我为这个问题做错了什么。如果有人能够指出我所做的逻辑错误,那将有助于节省大量时间。谢谢!

4 个答案:

答案 0 :(得分:3)

这应该这样做:

public static void sort(ArrayList<Number> list) {

Number temp = 0;

for (int i = 0; i < list.size() - 1; i++) {
    for (int j = i+1; j < list.size(); j++) {
        if (list.get(j).doubleValue() < list.get(i).doubleValue()) {
            temp = list.get(i);
            list.set(i, list.get(j));
            list.set(j, temp);
        }
    }
}
}

答案 1 :(得分:0)

你的问题是,你每次都以0开始第二个循环。这意味着,您还可以使用已经订购的元素。

将第二个循环更改为for (int j = i+1 ...,因此您可以使用未排序的列表其余部分(应该与索引i处的元素进行比较的元素)启动内部循环。

答案 2 :(得分:0)

你应该让嵌套循环从i+1而不是1

开始
for (int i = 0; i < list.size() - 1; i++) {
    for (int j = i+1; j < list.size(); j++) {
    ...
    }
}

答案 3 :(得分:0)

不要理会应用排序算法。处理此类问题时,请尝试使用Java功能。在下面看看:

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Problem13_3 {
    public static void main(String[] a){
        ArrayList<Number> list = new ArrayList<>();
        list.add(BigInteger.valueOf(74893748374938798L));
        list.add(Integer.valueOf(3));
        list.add(Double.valueOf(3.999999));
        list.add(BigDecimal.valueOf(43.545464543434));
        list.add(Integer.valueOf(0));
        System.out.println("Before sorting: " + list);
        sort(list);
        System.out.println("After sorting: " + list);
    }

    public static void sort(ArrayList<Number> list){
        Collections.sort(list, new NumberComparator());
    }
}

class NumberComparator implements Comparator<Number> {
    @Override
    public int compare(Number n1, Number n2){
        return (int)(n1.doubleValue() - n2.doubleValue());
    }
}