我最近被分配为一个数字列表创建一个冒泡排序(你将在我要向你展示的代码中找到列表),但是,虽然程序编译完全正常,但我总是得到这个cmd中的运行时错误...
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at hw.main(hw.java:17)
这是我到目前为止所拥有的。
//Ch 9 HW 7
class hw
{
public static void main(String[] args)
{
int[] x = new int[10];
x[0] = 100;
x[1] = 23;
x[2] = 15;
x[3] = 23;
x[4] = 7;
x[5] = 23;
x[6] = 2;
x[7] = 311;
x[8] = 5;
x[9] = 8;
x[10] = 3;
System.out.println(bubbleSort(x));
}
public static int[] bubbleSort(int[] x)
{
int placehold = 0;
for (int i = 0; i < x.length; i++)
{
if (x[i] > x[i + 1])
{
placehold = x[i + 1];
x[i] = x[i + 1];
x[i + 1] = placehold;
}
}
return x;
}
}
我想知道你们是否可以给我一个错误的解释和解决方法。万分感谢
〜安德鲁
编辑: 这段代码给了我一个&#34;找不到符号&#34; &#34; Arrays&#34;
的错误//Ch 9 HW 7
class hw
{
public static void main(String[] args)
{
int[] x = {100, 23, 15, 23, 7, 23, 2, 311, 5, 8, 3};
String y = Arrays.toString(bubbleSort(x));
System.out.println(y);
}
public static int[] bubbleSort(int[] x)
{
int placehold = 0;
for (int i = 0; i < x.length - 1; i++)
{
if (x[i] > x[i + 1])
{
placehold = x[i + 1];
x[i] = x[i + 1];
x[i + 1] = placehold;
}
}
return x;
}
}
最终编辑与更正:
这是那些好奇的CORRECT代码。
//Andrew Mancinelli
import java.util.*;
class hw
{
public static void main(String[] args)
{
int[] x = {100, 23, 15, 23, 7, 23, 2, 311, 5, 8, 3};
String y = Arrays.toString(bubbleSort(x));
System.out.println(y);
}
public static int[] bubbleSort(int[] x)
{
for (int start = 0; start < x.length - 1; start++)
{
int min = x[start];
int indexMin = start;
for (int j = start + 1; j < x.length; j++)
{
if (x[j] < min)
{
min = x[j];
indexMin = j;
}
}
x[indexMin] = x[start];
x[start] = min;
}
return x;
}
}
答案 0 :(得分:2)
您创建的数组有10个元素的容量:
int[] x = new int[10];
如果你仔细观察,你会分配11个元素:
x[0] = 100;
x[1] = 23;
x[2] = 15;
// ...
x[10] = 3;
因此,当您声明它时,可能会将容量更改为11:
int[] x = new int[11];
但是有一种更简单的方法来创建该数组:
int[] x = {100, 23, 15, 23, 7, 23, 2, 311, 5, 8, 3};
请注意,此处未指定数组的大小。 因此,你不能错误地给出太小或太大的尺寸。
在此代码中,当i = x.length - 1
时,表达式x[i + 1]
将超出范围:
for (int i = 0; i < x.length; i++)
{
if (x[i] > x[i + 1])
{
placehold = x[i + 1];
x[i] = x[i + 1];
x[i + 1] = placehold;
}
}
要解决此问题,请更改循环条件,以使i
无法到达x.length - 1
:
for (int i = 0; i < x.length - 1; i++)
<3>错误3
使用int[]
打印System.out.println
将无法生成您想要的内容。
这就是你想要的:
System.out.println(Arrays.toString(bubbleSort(x)));
没有Arrays.toString(...)
,您看到的值[I@6d06d69c
是数组哈希码的十六进制表示。这是Object.toString
的默认实现,数组继承。
这很没用,获取数组的字符串表示的标准方法是使用Arrays.toString(...)
。
注意:Arrays
位于java.util
,因此您需要为此添加导入:
import java.util.Arrays;
答案 1 :(得分:0)
BubbleSort方法的if条件是在最后一次迭代中要求索引i + 1请求一个不存在的索引,这就是抛出异常的原因
答案 2 :(得分:0)
在你的循环中,i的值从0变为10。 所以当i = 10时,x [i + 1] = x [11]但是你的数组中没有第11个索引,这就是你得到名为ArrayIndexOutOfBoundsException的运行时异常的原因。
所以你可以解决这个问题: 1)确保在访问阵列时不超过数组索引 2)使用错误消息作为调试错误的线索。