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

时间:2015-03-27 20:41:45

标签: 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!");
    }
}

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

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!");
    }
}

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

3 个答案:

答案 0 :(得分:8)

让我们一行一行。

int[] numbers = {1, 2, 3};

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

int length = numbers[3];

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

char[] chars = new char[length];

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

chars[numbers.length + 4] = 'y';

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

System.out.println("Done!");

这只输出“完成!”到控制台,没有魔法。

答案 1 :(得分:0)

我认为正确的答案是改变'数字'"

中的值
    int[] numbers = {1, 2, 3, 9};

或者更确切地说,添加任何大于或等于9的数字都可以。

这意味着'长度'将是9岁,#chars'数组的长度为9,元素[4(*)+ 4]的索引不会产生ArrayOutOfBoundsException

(*)4是'数字'的长度。阵列。

像这样:

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

答案 2 :(得分:-1)

已经回答了这个问题,我自己的回答可能不是最好的,但是我只是注释掉chars [numbers.length + 4] ='y';。 我使它看起来像这样** // ** chars [numbers.length + 4] ='y';