对java赋值方法感到困惑



大家好,现在我在学校学习数据结构,我很难理解我们的作业是基于老师创建的代码。

基本上,它是一个程序,用于存储整数,并根据它们的正数或负数为它们分配集合,以及跟踪整数的最后一项是否为天气的集合。我们有一个类,它用传递给它的任何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循环总是假的吗?

while循环似乎试图在数组中找到下一个"可用"空间。最初(正如您正确陈述的那样),while条件将立即为false。插入几次后,它会更有用。

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

[0,0,0,0,0]

如果调用insert(4),条件

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

失败,所以j不加1,4被插入位置0。现在c看起来像

[4,0,0,0,0]

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

[4,7,0,0,0]

谁能帮助解释第一个if语句内的while循环?

嗯,我觉得在理解你上面的程序时有点问题。所以我重写了代码,以使您的:

public void insert(int i){
    if (i > 0){
        int j = 0;
        while ((c[j] != 0) && (c[j] != i)){ //Introduced this bracket to show the start of while
           j++;
        } //Introduced this bracket to show the end of while
        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;
        }
    }
}

下一个if语句if (c[j] == 0)不在while循环内。希望现在你明白了

最新更新