java - 有人可以解释为什么对我的数组进行这些特定更改可以修复我的错误吗?

标签 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?

最佳答案

让我们逐行分析。

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

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

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 个元素长,这会导致错误。因此,我们必须将 4 更改为与 3 相加时小于 3 但大于或等于 0 的值。因此您可以将其更改为 -1、-2 或 -3。

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

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

关于java - 有人可以解释为什么对我的数组进行这些特定更改可以修复我的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29309845/

相关文章:

java - 多线程 - 为什么下面的程序表现得如此奇怪?

java - 为什么我在尝试将 JSON 数据加载到 RecyclerView 时收到 NullPointerException?

java - @Embeddable 中的实体在用作 @EmbeddedId 时忽略级联注释

javascript - 如何使用原型(prototype)选择方法选择前几项?

ruby - 在Ruby中,过滤一个对象中所有包含单词 "time"的方法的好方法是什么?

java 从命令行导入包

c++ - 使用自定义提取运算符时出现错误 C2679

c++ - g++ 4.2 : internal compiler error: in make_thunk, 在 cp/method.c:129

java - 在AWS,普通AWS项目和Maven项目中执行SWF时有什么区别吗?

c# - 如何使用 Linq 从 jArray 访问元素