创建具有可变数据类型的数组

Creating an array with mutable data type

提问人:The highlight 提问时间:6/26/2021 更新时间:6/29/2021 访问量:118

问:

**Initializing an array of NaturalNumbers with values 1 through 4**

当我调试时,我发现数组 = [5,5,5,5],我的目标是数组 = [1,2,3,4]。

        NaturalNumber[] array = new NaturalNumber[4];
        NaturalNumber count = new NaturalNumber2(1);
        for (int i = 0; i < array.length; i++) {
            array[i] = count;

            count.increment();

这是可用于自然数的所有方法的链接。我只是不明白如何在不更改值的情况下创建所需的数组。count

http://web.cse.ohio-state.edu/software/common/doc/index.html?components/naturalnumber/NaturalNumber.html

爪哇岛 可变

评论

0赞 Louis Wasserman 6/26/2021
您将绝对、不可避免地必须复制该值。
0赞 Yoshikage Kira 6/26/2021
您应该在 for 循环中而不是在 for 循环之外创建对象。

答:

0赞 The highlight 6/26/2021 #1
 NaturalNumber[] array = new NaturalNumber[4];
        NaturalNumber count = new NaturalNumber2(0);
        for (int i = 0; i < array.length; i++) {

            count = new NaturalNumber2(i);
            count.increment();
            array[i] = count;
0赞 sanjeevRm 6/26/2021 #2
**Initializing an array of NaturalNumbers with values 1 through 4**

你也可以这样做

int[] numbers = IntStream.range(1, 5).toArray();
0赞 Alan 6/29/2021 #3

你得到了 5,5,5,5,5,因为你使用的是盒装非基元类型而不是基元。

因此,对对象的引用是指向对象的位置。当你把它放到数组中时,你把引用(四个副本)放在里面,它包含最后一个值。由于您在最后一次循环中执行增量作为最后一件事,因此它指向值 5(但不是值 5)。NaturalNumber countcount

如果你声明并使用,因为你不能调用一个基元,那么你会得到序列 1、2、3、4。运行时引擎会将每次的实际计数值放入数组中。int countcount++.increment ()