字符串数组不起作用。编译器没有交互

时间:2015-12-23 14:23:43

标签: java arrays

我正在学习如何使用不同类型的值持有者对数组进行排序。我尝试使用字符串对数组进行排序,但它会出现错误消息,在线程中出现异常" 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]);
        }

    }

}

7 个答案:

答案 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]);
}