大家好,现在我正在学校学习数据结构,但我无法理解我们的作业所基于的由老师创建的代码。
基本上,它是一个程序,旨在存储整数并根据它们是正数还是负数来分配它们的集合,以及跟踪天气的集合或不是整数的最后一个条目。我们有一个类,它创建一个新数组,存储传递给它的任何 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/