【发布时间】:2013-12-04 00:13:18
【问题描述】:
我正在制作一个程序,它接受一个整数数组并使用“冒泡排序”对它进行排序(切换相邻的数字直到它按顺序排列。)我一直在试图弄清楚为什么我让这个越界错误,但对我来说仍然没有多大意义,因为数组对我来说仍然是一个相当新的概念。
public static boolean onePass(int[] a) {
boolean ordered = true;
for (int i = 0; i+1 < a.length; i++) {
if (a[i] < a[i+1]) {
ordered = false;
return ordered;
} }
return ordered;
}
public static void printArray(int[] b) {
for(int i = 0; i < b.length; i++){
System.out.println(i + " " + b[i]);
}
}
public static int[] bubbleSort(int[] unsorted) {
int[] a = unsorted;
boolean sorted = false;
for (int i = 0; sorted == true; i++) {
sorted = onePass(a);
if (i > a.length) {
i = 0;
}
if (a[i] < a[i+1] && i < a.length) {
swapElement(a, i, i + 1);
//System.out.println(i + " " + (i+1));
}
}
return a;
}
onePass 方法应该检查它是否有序。
我得到:“线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:25” 在这一行: if (a[i]
对不起,如果这是一个超级愚蠢的问题 我在一个学习java的班级,所以可能有一种更有效的方法来制作这个程序,但是使用我们目前所学的,这是我自己能够理解和编写的。
编辑:我正在排序的数组在我使用 BufferedReader 读取的文本文档中有 25 个数字 (0-24)。
编辑 2:找到了一种更有效的冒泡排序方法,最终将所有这些都注释掉了,但感谢您的帮助!
【问题讨论】:
-
如果一个数组被声明为
new int[3],它有多少个和哪些索引?当您执行a[i+1]时会发生什么?i可以取的最后一个值是多少? -
ArrayIndexOutOfBoundsException:25表示您正在尝试访问索引为 25 的元素。对于索引为 25 的数组,它必须至少包含 26 个元素(您甚至指出您了解这个从 0 开始的索引概念:The array that i am sorting has 25 numbers (0-24)) -
我理解错误的含义,但我不明白为什么它超出 i = 23 使 i+1=24。
-
尝试调试。这是一个很棒的工具。
标签: java arrays indexoutofboundsexception bubble-sort