有人可以解释为什么我的数组的这些特定更改修复了我的错误?

Fru*_*ewb 1 java arrays compiler-errors

我开始用自己的在线教程教自己Java,我很难理解在这种情况下我应该做些什么:

任务:"更改数字中的值,这样就不会产生错误."

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        int length = numbers[3];
        char[] chars = new char[length];
        chars[numbers.length + 4] = 'y';
        System.out.println("Done!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我检查了解决方案,但仍然不明白错误是什么以及如何修复它:

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        int length = numbers[2];
        char[] chars = new char[length];
        chars[numbers.length - 1] = 'y';
        System.out.println("Done!");
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我现在明白3到2的变化,但为什么要将+4改为-1?

itc*_*hee 8

让我们一行一行.

int[] numbers = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含3个元素的数组.第一个是1,第二个是2和第三个3.

int length = numbers[3];
Run Code Online (Sandbox Code Playgroud)

我们学习了所说阵列的长度是3.由于第三个元素的值也是3,因此您使用此值.但是数组的索引从0开始,因此numbers[3](3是索引)会导致错误.numbers[0]是1,numbers[1]是3,numbers[2]是3. numbers[3]是错误的.

char[] chars = new char[length];
Run Code Online (Sandbox Code Playgroud)

这会创建一个新数组,这次不是数字,而是字符.如'a','b''y'.数组的长度为3.

chars[numbers.length + 4] = 'y';
Run Code Online (Sandbox Code Playgroud)

numbers.length是3.为此添加4是7.如您所知,索引7指的是数组的第八个元素.由于chars只有3个元素长,这将导致错误.所以我们必须将四个变成一个东西,当它加到3时,小于3但大于或等于0.所以你可以将它改为-1,-2或-3.

System.out.println("Done!");
Run Code Online (Sandbox Code Playgroud)

这只输出"完成!" 到控制台,没有魔法.