我只想通过sort方法对数组进行排序。但不幸的是它引发了一个错误:
java.lang.ArrayIndexOutOfBoundsException:10 at Search.sort(Search.java:30) at Search.main(Search.java:67)
这是我的代码:
import java.util.Scanner;
public class Search {
public Search() {
System.out.println("inside a constructer");
}
public int[] sort(int x[]) {
for (int i = 0; i < x.length - 1; i++)
for (int j = 1; j < x.length; j++) {
int temp;
if (x[i] > x[j]) {
temp = x[i];
x[i] = x[j];
x[j] = x[i];
}
}
return x;
}
public static void main(String[] args) {
// System.out.println("fgdg"+num);
int num[] = new int[10];
Scanner sc = new Scanner(System.in);
System.out.println("Eneter the 10 integers:");
for (int i = 0; i < 10; i++) {
System.out.println("Enter the " + (i + 1) + " number:");
num[i] = sc.nextInt();
}
System.out.println("before sorting:");
for (int m = 0; m <= num.length; m++)
System.out.println(num[m]);
Search obj = new Search();
int x1[] = obj.sort(num);
System.out.println("sorted:");
for (int k = 0; k <= x1.length; k++)
System.out.println(x1[k]);
}
}
答案 0 :(得分:1)
将您的条件更改为:
for (int i=0;i<x.length;i++)
for(int j=1;j<x.length;j++){
//your code
}
}
您的代码的作用:它检查数组中从索引0到数组大小的每个数字。
假设你有array of 10 numbers
。那么数组的大小将是10
。你正在迭代from 0 to 10
。但是数字存储在索引位置0 to 9
中。因此,当它尝试从数组中获取第10个元素时会抛出异常。
答案 1 :(得分:1)
int num[] = new int[10]
表示您的数组有10个元素(长度= 10),索引从0到9。
将方法中的for循环更改为
for (int i=0;i<x.length;i++)
for(int j=i+1;j<x.length;j++)
!!更改转到
的每个循环<= array.length
进入
< array.length
因为数组的最后一个元素是索引array.length - 1。
在sort函数中更改x [i]和x [j]的值时也会出错。它应该是:
if (x[i] > x[j]) {
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
sort方法中的j循环必须从i + 1开始,而不是从1开始。
答案 2 :(得分:1)
数组索引从零开始。 改变
for (int i=0;i<=x.length;i++)
for(int j=1;j<=x.length;j++)
到
for (int i=0;i<x.length;i++)
for(int j=i;j<x.length;j++)
<强>更新强>
另外两个地方。将<=
更改为<
for (int m = 0; m <= num.length; m++)
System.out.println(num[m]);
和
for (int k = 0; k <= x1.length; k++)
System.out.println(x1[k]);
答案 3 :(得分:0)
for (int i=0;i<=x.length;i++)
for(int j=1;j<=x.length;j++)
{
int temp=0;
if(x[i]>x[j])
{
temp=x[i];
x[i]=x[j];
x[j]=x[i];
}
}
应该是
for (int i=0;i<x.length;i++)
for(int j=1;j<x.length;j++)
{
int temp=0;
if(x[i]>x[j])
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
你超过阵列的大小!
答案 4 :(得分:0)
将for循环更改为此代码:
for (int i=0;i<x.length;i++)
for(int j=i;j<x.length;j++)