大家好,现在我在学校学习数据结构,我很难理解我们的作业是基于老师创建的代码。
基本上,它是一个程序,用于存储整数,并根据它们的正数或负数为它们分配集合,以及跟踪整数的最后一项是否为天气的集合。我们有一个类,它用传递给它的任何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
循环内。希望现在你明白了