从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](显然不正确)。
现在已经很晚了,我很难弄清楚我为这个问题做错了什么。如果有人能够指出我所做的逻辑错误,那将有助于节省大量时间。谢谢!
答案 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());
}
}