我正在学习如何使用不同类型的值持有者对数组进行排序。我尝试使用字符串对数组进行排序,但它会出现错误消息,在线程中出现异常" main" java.lang.ArrayIndexOutOfBoundsException:6 在SortingArrays.main(SortingArrays.java:50)
编译器找不到任何错误,但它提出了这个错误。带数字的数组工作正常,但字符串没有。这是我的代码。
import java.util.Arrays;
public class SortingArrays {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] aryNums;
aryNums = new int[6];
aryNums[0] = 7;
aryNums[1] = 89;
aryNums[2] = 45;
aryNums[3] = 234;
aryNums[4] = 2;
aryNums[5] = 75;
Arrays.sort(aryNums);
int i;
for (i = 0; i < aryNums.length; i++) {
System.out.println(aryNums[i]);
}
String[] aryStrings;
aryStrings = new String[5];
aryStrings[0] = "I have no idea what I'm doing.";
aryStrings[1] = "Should I know what I'm doing?";
aryStrings[2] = "I guess not.";
aryStrings[3] = "There's my boss.";
aryStrings[4] = "Whoop, he's looking. Hide!";
Arrays.sort(aryStrings);
int x;
for (x = 0; x < aryStrings.length; x++) {
System.out.println(aryStrings[i]);
}
}
}
答案 0 :(得分:4)
您正在获得运行时异常。 ArrayIndexOutOfBoundsException
表示您尝试使用其定义的内容访问超出其容量的数组。
问题在于此代码:
for (x = 0; x < aryStrings.length; x++){
System.out.println(aryStrings[i]);
^^
}
您使用i
作为索引而不是x
。在你的情况下,i
(在你的打印语句之后)将是6,你的数组可以包含5个以0开头并以5结尾的元素。
答案 1 :(得分:3)
在程序的最后:
System.out.println(aryStrings[i]);
i = 6,当然是超出范围
您需要的是:
System.out.println(aryStrings[x]);
答案 2 :(得分:2)
i
为6。
所以这里
for (x = 0; x < aryStrings.length; x++){
System.out.println(aryStrings[i]); // i here is 6 but there are 5 elements in aryStrings
}
在此循环中使用x
而不是i
答案 3 :(得分:1)
正如其他评论者所说,问题在于你的迭代变量。 但要完全避免此问题,请使用for-each循环。 正如Joshua Bloch在Effective Java,第2版(第46项)中所说:
// The preferred idiom for iterating over collections and arrays
for (int aryNum : aryNums) {
System.out.println(aryNum);
}
或者更好的Java 8:
Arrays.stream(aryNums).forEach(System.out::println);
答案 4 :(得分:0)
您在第二个打印语句中使用i而不是x
答案 5 :(得分:0)
更改x
System.out.println(aryStrings[x]);
答案 6 :(得分:0)
正如其他答案所述,当你到达第二个循环时,i
等于一个比你的String数组有索引更高的整数。
解决问题的另一种方法是重置i
:
int x;
i = 0;//re-initialize
for (x = 0; x < aryStrings.length; x++) {
System.out.println(aryStrings[i]);
}
然而,这违背了x
变量的目的。
根据经验,我会将你的增量器保持在你的循环中,以防止出现这样的问题:
//declare x in the loop
for (int x = 0; x < aryStrings.length; x++) {
System.out.println(aryStrings[x]);
}