排序数组时出现ArrayIndexOutOfBoundsException

时间:2014-09-24 08:28:48

标签: java arrays sorting object

我只想通过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]);
  }
}

5 个答案:

答案 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++)