【发布时间】:2016-03-06 18:06:06
【问题描述】:
为了好玩,我写了一个简单的插入排序算法。它似乎可以很好地解决一个问题,它仅在数组中的所有项目(它试图排序的东西)都是个位数整数时才有效。如果一个元素是多位整数,它会将所有内容排序到该整数,然后停止并抛出一个IndexOutOfBoundsException.
注意:只是为了让你理解源代码,我的程序的工作方式是这样的:我在构造中将InsertionSort 类传递给原始int 数组。然后我将其转换为ArrayList list。我知道 ArrayList list 复制了正确的值,因为我将其打印出来并且匹配。
示例运行:
工作:
{ 9, 2, 8, 5, 1, 6, 6, 7, 1}; //works perfectly->
Unsorted List: [9, 2, 8, 5, 1, 6, 6, 7, 1]
Step 1: [9]
Step 2: [2, 9]
Step 3: [2, 8, 9]
Step 4: [2, 5, 8, 9]
Step 5: [1, 2, 5, 8, 9]
Step 6: [1, 2, 5, 6, 8, 9]
Step 7: [1, 2, 5, 6, 6, 8, 9]
Step 8: [1, 2, 5, 6, 6, 7, 8, 9]
Step 9: [1, 1, 2, 5, 6, 6, 7, 8, 9]
Sorted List: [1, 1, 2, 5, 6, 6, 7, 8, 9]
不工作:
{ 9, 2, 8, 5, 1, 6, 6, 7, 1, 22, 823, 30, 244, 45, 5}; //doesn't work->
Unsorted List: [9, 2, 8, 5, 1, 6, 6, 7, 1, 22, 823, 30, 244, 45, 5]
Step 1: [9]
Step 2: [2, 9]
Step 3: [2, 8, 9]
Step 4: [2, 5, 8, 9]
Step 5: [1, 2, 5, 8, 9]
Step 6: [1, 2, 5, 6, 8, 9]
Step 7: [1, 2, 5, 6, 6, 8, 9]
Step 8: [1, 2, 5, 6, 6, 7, 8, 9]
Step 9: [1, 1, 2, 5, 6, 6, 7, 8, 9]
java.lang.IndexOutOfBoundsException: Index: 9, Size: 9
Sorted List: [1, 1, 2, 5, 6, 6, 7, 8, 9]
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at InsertionSort.sort(InsertionSort.java:41)
at Executer.main(Executer.java:7)
这里是相关的排序代码:
static ArrayList<Integer> list = new<Integer> ArrayList();
static ArrayList<Integer> list2 = new<Integer> ArrayList();
public static int[] sort() {
int s = 0;
System.out.println("Unsorted List: " + list.toString());
try {
for (int i = 0; i < list.size(); i++) {
s++;
if (i == 0) {
list2.add(list.get(i));
System.out.println("Step " + s + ": " + list2.toString());
continue;
} else {
int z = 0;
while (list2.get(z) < list.get(i)) {
z++;
}
list2.add(z, list.get(i));
}
System.out.println("Step " + s + ": " + list2.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Sorted List: " + list2.toString());
return toPrimative(list.toArray(new Integer[list.size()]));
}
【问题讨论】:
-
听起来你应该做一些调试......
-
@OliverCharlesworth 我尝试添加一些打印语句和东西。我还阅读了有关 ArrayList 的 JavaDoc。老实说,我真的不知道如何使用eclipse调试器。你能推荐一个调试程序吗? (在哪里添加打印语句等)
-
学习使用调试器与学习语言一样重要。花一些时间在上面。 tutorialspoint.com/eclipse/eclipse_debugging_program.htm
-
@OldProgrammer 好的,谢谢您的链接和建议。你是 100% 正确的,我一定会学习调试器。我一直想这样做有一段时间了,只是从来没有真正需要它,因为我的大多数程序都非常简单。
标签: java arrays algorithm sorting arraylist