java - 对java赋值方法的困惑

标签 java arrays methods data-structures

大家好,现在我正在学校学习数据结构,但我无法理解我们的作业所基于的由老师创建的代码。

基本上,它是一个程序,旨在存储整数并根据它们是正数还是负数来分配它们的集合,以及跟踪天气的集合或不是整数的最后一个条目。我们有一个类,它创建一个新数组,存储传递给它的任何 int。我们还有一个 insert 方法,仅当 int 尚不存在时才将其插入到集合中。代码如下:

public IntColl1(int i){
    c = new int[i+1];
    c[0] = 0;
}

public void insert(int i){
    if (i > 0){
        int j = 0;
        while ((c[j] != 0) && (c[j] != i)) j++;
        if (c[j] == 0){
            if (j == c.length - 1){
                int newLength = (c.length * 2);
                int[] d = new int[newLength];
                for(int l = 0; l < c.length; l++){
                    d[l] = c[l];
                }
                c = d;
            }
            c[j] = i;
            c[j + 1] = 0;
        }
    }
}

它应该将 Int 插入到数组中,如果数组太小,它会创建一个长度加倍的新数组。为了测试,我们设置了 Intcoll1(1),任何人都可以帮助解释第一个 if 语句内的 while 循环吗?我一直认为,当创建一个空数组时,槽位都设置为 0,如果是这样的话,那么 while 循环不是总是 false 吗?

最佳答案

看来 while 循环正在尝试查找数组中的下一个“可用”空间。最初(正如您正确所述) while 条件将立即为假。插入几次后,它会更有用。

假设初始数组大小为 5,c 开始看起来像

[0,0,0,0,0]

如果我调用insert(4),则条件

(c[j] != 0) && (c[j] != i)

失败,因此 j 永远不会递增,并且 4 被插入到位置 0。现在 c 看起来像

[4,0,0,0,0]

现在,如果我调用 insert(7),当 j 为 0 时,条件最初会满足,但当 j 为 0 时,条件将失败增加到 1,因此 7 将作为位置 1 插入:

[4,7,0,0,0]

关于java - 对java赋值方法的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32622967/

相关文章:

java - 如何使用java在具有n行的xml文件中拆分100行并将其添加到子文件中

java - 如何更改 JButton 的位置

javascript - 将键值对添加到数组中的所有对象

java - 使用 ArrayList 反转 3X3 数组中的元素

c++ - 什么是++array[str[i]];做?

javascript - 在不使用 () 包装的情况下调用 native Javascript 类型的方法

java - BigInteger 还是不是 BigInteger?

java - Eclipse 引用图像

c# - 类,使用方法的最佳方式是什么?

java - 为什么我的程序只打印一个成绩?