2015-09-17 57 views
1

嗨,大家现在我在学校采取数据结构,我无法理解代码,我们的作业基于哪些是由老师创建的。关于java分配方法的困惑

基本上它的一个程序设计用来存储整数,并根据它们的正数,负数和跟踪天气或不是整数的最后一个条目来设置它们。我们有一个类创建一个新的数组,并存储传递给它的任何int。我们也有一个插入方法,只有当它不在那里时才将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循环来提供帮助吗?我一直认为,当一个空数组被创建时,slot都被设置为0,并且如果那样的话那么while循环总是假的?

+0

对不起!这是我的第一个问题,所以还是习惯了 – 10marcer

回答

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递增一个,所以7将被插入的位置1:

[4,7,0,0,0] 
-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

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循环中。希望现在你明白它。

+0

这就是它给我们的方式,我重写了它,并添加了括号,但为此我只是复制了我们的老师给我们的东西 – 10marcer

+0

@ 10marcer那么你在理解它时遇到什么问题? – Blip