排序问题..

时间:2013-12-09 07:26:26

标签: java sorting netbeans-6.9

你好,我是编程的新手,目前我的任务是创建一个与排序相关的程序。我一直收到错误

 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
       at sorting.Sorting.main(Sorting.java:17)
 Java Result: 1 

它告诉的行是错误是第17行,其中包含:

 if (ArrayOfInts[j] > ArrayOfInts[j + 1])
请帮助..继承人。

public class Sorting{
   public static void main(String[] args){
       int[] ArrayOfInts = {42, 97, 3, 689, 14, 1076, 3000, 8, 632, 327, 976, 4215};
       for(int i = ArrayOfInts.length; i >= 1; i--){
          for(int j = 0; j < i; j--){
            if (ArrayOfInts[j] > ArrayOfInts[j + 1]){
                int temp = ArrayOfInts[j];
                ArrayOfInts[j] = ArrayOfInts[j + 1];
                ArrayOfInts[j - 1] = temp;

            }
          }
       }
       for(int i = 0; i < ArrayOfInts.length; i++){
            System.out.println(ArrayOfInts[i] + " ");
       }
  }
}

3 个答案:

答案 0 :(得分:2)

j=0时,这一行存在问题:

ArrayOfInts[j - 1] = temp;

当你尝试访问数组中的-1索引时。

答案 1 :(得分:2)

for(int i = ArrayOfInts.length; i >= 1; i--)

您好请用以下行替换上面的代码行

for(int i = ArrayOfInts.length-1; i >= 0; i--)

答案 2 :(得分:0)

我对代码做了一些修正:
1.对于1st for循环,而不是int i = ArrayOfInts.length,使用int i = ArrayOfInts.length-1,这是beacuse,length将返回数组中的元素数,并且数组为零索引,因此在您的情况下长度将为是12即0到11 2.对于第二个for循环,而不是j-使用j ++,因为j从0开始到i 3.而不是ArrayOfInts [j - 1] = temp;使用ArrayOfInts [j + 1] = temp;

public static void main(String[] args)
    {
        int[] ArrayOfInts = {42, 97, 3, 689, 14, 1076, 3000, 8, 632, 327, 976, 4215};
        for(int i = ArrayOfInts.length-1; i >= 1; i--)
        {
            for(int j = 0; j < i; j++)
            {
                if (ArrayOfInts[j] > ArrayOfInts[j + 1])
                {
                    int temp = ArrayOfInts[j];
                    ArrayOfInts[j] = ArrayOfInts[j + 1];
                    ArrayOfInts[j + 1] = temp;

                }
            }
        }
        for(int i = 0; i < ArrayOfInts.length; i++)
                    {
                        System.out.print(ArrayOfInts[i] + " ");
                        System.out.println();
                    }
    }