对java赋值方法感到困惑

时间:2015-09-17 05:09:52

标签: 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循环总是假的吗?

3 个答案:

答案 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