大家好,我现在正在学校学习数据结构,而且我很难理解我们的作业所依据的代码是由老师创建的。
基本上它是一个程序,用于存储整数并根据它们的正数,负数和跟踪天气的集合(或者不是整数的最后一个条目)来分配它们。我们有一个类创建一个新数组,其中包含传递给它的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循环总是假的吗?
答案 0 :(得分:0)
似乎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
增加为1时将失败,因此将插入7作为位置1 :
[4,7,0,0,0]
答案 1 :(得分: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
循环中。希望现在你能理解它。
答案 2 :(得分:-2)
在这种情况下,您不应该使用数组。但如果家庭作业迫使你使用它们,我无法帮助你,因为我从未见过具有这么多变量名称的代码名称不佳的代码。我无法理解代码。
或者,您可以使用ArrayList
!在这种情况下,这个东西非常有用,因为你正在向数组添加东西。现在让我告诉你ArrayList
。
要创建ArrayList
个整数,请先import java.util.ArrayList;
并创建ArrayList
个对象。
ArrayList<Integer> array = new ArrayList<> ();
要将数据添加到数组列表,请使用add
方法。在这个例子中,我添加了5。
array.add(5);
要访问数组列表中的内容,请使用get
方法。在这个例子中,我得到索引为0的元素,并将其赋值给变量。
int i = array.get(0);
有关详细信息,请转到:http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html