java.lang.ArrayIndexOutofBounds异常:10

java.lang.ArrayIndexOutofBounds异常:10,java,Java,我想不出问题出在哪里请有人帮忙。程序应该找到数组中重复值的索引并打印出来。输出java.lang.ArrayIndexOutOfBoundsException:10 private static String s = ""; private static int num = 0; public static void main(String[] args) { int[] array = { 1, 5, 3, 8, 2, 3, 7, 1, 9, 3 }; for (int i

我想不出问题出在哪里请有人帮忙。程序应该找到数组中重复值的索引并打印出来。输出java.lang.ArrayIndexOutOfBoundsException:10

private static String s = "";
private static int num = 0;

public static void main(String[] args) {
    int[] array = { 1, 5, 3, 8, 2, 3, 7, 1, 9, 3 };
    for (int i = 1; i <= array.length; ++i) {
        while (num <= array.length - 2 && array[num] == array[i]) {
            s += i + ","; 
            num += 1;
        }
    }
    System.out.println("index 0 are at positions" +s);
    System.out.println();
}
这应该对你有用。数组的长度是10,所以最后一个索引是9,而不是10!从0开始

array.length是10,但数组中的最后一个索引是9,因为数组索引从0开始


for循环中的停止条件应该是i首先,应该从0开始,而不是从索引1开始。其次,你应该使用<符号

for (int i = 0; i < array.length; ++i)

只有元素的最大数量设置为10,这意味着索引编号将从0开始

您只能在第9个元素之前获取元素

java.lang.ArrayIndexOutOfBoundsException: 10
很明显,你没有第11个元素

for (int i = 1; i < array.length; ++i) {
    while (num <= array.length - 2 && array[num] == array[i]) {
        s += i + ","; 
        num += 1;
    }
}

这对你来说就足够了。

你花在写这个问题上的时间最好花在谷歌上键入java数组索引越界异常上。排名前10位的命中率与这里的问题完全相同。长度为10表示数组[0-9]的位置0是第一位,位置1是第二位。感谢您的帮助,但上面的代码不会在重复位置打印数组的索引。它打印:索引0位于位置0,1,2,3,4,5,6,7,8,9,
for (int i = 1; i < array.length; ++i) {
    while (num <= array.length - 2 && array[num] == array[i]) {
        s += i + ","; 
        num += 1;
    }
}