处理数组和冒泡排序时的运行时错误(Java)

处理数组和冒泡排序时的运行时错误(Java),java,runtime-error,bubble-sort,Java,Runtime Error,Bubble Sort,我最近被指派为一个数字列表创建一个冒泡排序(你会在我即将向你展示的代码中找到这个列表),然而,尽管程序编译得非常好,我总是在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

我最近被指派为一个数字列表创建一个冒泡排序(你会在我即将向你展示的代码中找到这个列表),然而,尽管程序编译得非常好,我总是在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;
    }   
}
//Ch 9 HW 7
hw类
{
公共静态void main(字符串[]args)
{
int[]x=新的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));
}
公共静态int[]bubbleSort(int[]x)
{
int placehold=0;
对于(int i=0;ix[i+1])
{
placehold=x[i+1];
x[i]=x[i+1];
x[i+1]=placehold;
}   
}
返回x;
}   
}
我想知道你们是否能给我一个错误的解释和解决方法。非常感谢

~z~安德鲁

编辑: 此代码为“数组”提供了一个“找不到符号”错误

//Ch 9 HW 7
hw类
{
公共静态void main(字符串[]args)
{
int[]x={100,23,15,23,7,23,231,5,8,3};
字符串y=Arrays.toString(bubbleSort(x));
系统输出打印项次(y);
}
公共静态int[]bubbleSort(int[]x)
{
int placehold=0;
对于(int i=0;ix[i+1])
{
placehold=x[i+1];
x[i]=x[i+1];
x[i+1]=placehold;
}   
}
返回x;
}   
}
最终编辑和更正:

下面是那些好奇的人的正确代码

//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;
    }   
}
//Andrew Mancinelli
导入java.util.*;
hw类
{ 
公共静态void main(字符串[]args)
{
int[]x={100,23,15,23,7,23,231,5,8,3};
字符串y=Arrays.toString(bubbleSort(x));
系统输出打印项次(y);
}
公共静态int[]bubbleSort(int[]x)
{
对于(int start=0;start
Bug#1 您创建的阵列可容纳10个元素:

x[0] = 100;
x[1] = 23;
x[2] = 15;
// ...
x[10] = 3;
如果仔细观察,您将分配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};
请注意,此处未指定数组的大小。 因此,您不能错误地给出太小或太大的尺寸

错误2 在此代码中,当
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;
    }   
}
错误3 使用
System.out.println
打印
int[]
将无法生成所需的内容。 这就是你想要的:

System.out.println(Arrays.toString(bubbleSort(x)));
如果没有
Arrays.toString(…)
,则值
[I@6d06d69c
您看到的是数组哈希代码的十六进制表示形式。这是数组继承的
Object.toString
的默认实现。 这是非常无用的,获取数组的字符串表示的标准方法是使用
Arrays.toString(…)

注意:
Arrays
位于
java.util
中,因此需要为此添加导入:

import java.util.Arrays;

BubbleSort方法的if条件是在上一次迭代中请求索引i+1,请求一个不存在的索引,这就是在循环中引发异常的原因。i的值从0到10。 因此,当i=10,x[i+1]=x[11]但数组中没有第11个索引时,这就是为什么会出现名为ArrayIndexOutOfBoundsException的运行时异常

因此,你可以从这个问题中得到的是: 1) 确保在访问阵列时未超过阵列索引
2) 使用错误消息作为调试错误的线索。

您将
x
10个数字设置为10个,然后为其分配了11个值……:
如果一个数组有n个分量,我们说n是数组的长度;数组的分量使用从0到n-1的整数索引引用。
System.out.println(Arrays.toString(bubbleSort(x)));
import java.util.Arrays;