任何人都可以帮助我摆脱这个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]);
}
}
答案 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