2015-09-17 59 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