线程" main"中的例外情况java.lang.ArrayIndexOutOfBoundsException:10

时间:2014-07-05 06:45:09

标签: java windows

任何人都可以帮助我摆脱这个Exception吗?

  

“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:10”

import java.util.*;
public class AscendingOrder {
    public static void main(String[] args) {

        int i, j, temp;
        int a[] = {
            10, 5, 7, 98, 45, 34, 38, 56, 34, 93
        };

        for (i = 0; i < a.length; i++) {
            for (j = i + 1; j < a.length - 1; j++) {
                if (a[i] > a[j]) {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                    i++;
                }
            }
        }
        System.out.println(a[i]);
    }
}

9 个答案:

答案 0 :(得分:1)

上一句话中的例外 -

  

的System.out.println(A [1]);

这不是打印整个数组,而是打印数组的第11个索引。 所以你得到了例外。 因为当for循环结束时,i值增加1.

尝试

  

的System.out.println(Arrays.toString的(a));

答案 1 :(得分:1)

因为在System.out.println(a[i]); i等于a.length(根据for循环条件),您的循环条件也已交换

for (i = 0; i < a.length - 1; i++) {
  for (j = i + 1; j < a.length; j++) {
    if (a[i] > a[j]) {
      temp = a[i];
      a[i] = a[j];
      a[j] = temp;
    }
  }
}
System.out.println(Arrays.toString(a)); // <-- print the entire array

答案 2 :(得分:0)

更改您的代码

 public static void main(String[] args) {

    int a[] = {10, 5, 7, 98, 45, 34, 38, 56, 34, 93};
    for (int i = 0; i < a.length -1; i++) {
        for (int j = i + 1; j < a.length; j++) {
            if (a[i] > a[j]) {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    for (int k = 0; k < a.length; k++) {
        System.out.println(a[k]);

    }
}

您可以阻止在for循环中声明变量的异常。

例如:for (int i = 0; i < a.length -1; i++)

答案 3 :(得分:0)

这是最后一个声明。

中改变它
 System.out.println(a[i-1]); 

答案 4 :(得分:0)

您可能需要查看java.util.Arrays课程。你可能会发现一个很好的方法:sort(int [])

-Thomas

答案 5 :(得分:0)

import java.util.*;

public class AscendingOrder {    public static void main(String [] args){

int i,j,temp ;      
int a[]={10,5,7,98,45,34,38,56, 34,93};

for ( i=0; i<a.length;i++){         
    for (j=i+1; j<a.length-1;j++){              
        if( a[i] > a[j]){                   
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;                  
            i++;
        }
    }
    System.out.println(a[i]);
}                        

}

答案 6 :(得分:0)

正如Tarun所说,问题出在你最后的'println'声明中。

当你的i = 9迭代结束时,'i ++'一词使你的变量增加并且值为10.当然,你永远不会进入循环,但你仍然试图打印i [10]。这超出了你的数组范围,从i [0]扩展到i [9]。

答案 7 :(得分:0)

使用array a打印您的Arrays utility对象。

<强>程序:

public class TestArray {
        public static void main(String[] args) {

            int i, j, temp;
            int a[] = {
                10, 5, 7, 98, 45, 34, 38, 56, 34, 93
            };

            for (i = 0; i < a.length; i++) {
                for (j = i + 1; j < a.length - 1; j++) {
                    if (a[i] > a[j]) {
                        temp = a[i];
                        a[i] = a[j];
                        a[j] = temp;
                        i++;
                    }
                }
            }
            System.out.println(Arrays.toString(a));
        }
}

<强>输出:

[5, 7, 10, 45, 34, 38, 56, 34, 98, 93]

答案 8 :(得分:-1)

嘿,根据您的代码,当您尝试打印时

的System.out.println(A [1]);

它会抛出异常。你应该关注i的价值。 当你的循环终止时,i的值=数组的长度+ 1。

所以我建议你打印

的System.out.println(A [I-1]);

您可以从此处了解有关异常处理的更多信息 http://java2all.com/technology/core-java/exception-handling/introduction

从这里了解线程 http://java2all.com/technology/core-java/multithreading