2014-02-14 53 views
0

我試圖添加this.array的內容到一個臨時數組,但是當我打印返回值時,它總是空的。ArrayList <Integer> addAll方法不添加

Class對象

import java.util.*; 
public class LetterInventory{ 

private ArrayList<Integer> array; 
private int size; 

public LetterInventory(String input){ 
    size = input.length(); 
    array = new ArrayList<Integer>(); 
    for(int i = 0;i<input.length();i++){ 
     array.add(i,(int)input.charAt(i)); 
    } 
} 

public LetterInventory(){ 
    size = 0; 
    array = new ArrayList<Integer>(); 
} 

public int size(){ 
    return size; 
} 

public LetterInventory add(LetterInventory other){ 
    LetterInventory temp = new LetterInventory(); 
    temp.array.addAll(array); 
    return temp; 
} 

public String toString(){ 
    String result = "["; 
    for(int i = 0;i<=size-1;i++){ 
     int temp = array.get(i); 
     result += (char)temp; 
    } 
    return result += "]"; 
} 
} 

和我的客戶端代碼

import java.util.*; 

public class Practice { 
public static void main (String[] args){ 
    LetterInventory l1 = new LetterInventory("aaa"); 
    LetterInventory l2 = new LetterInventory("bbb"); 
    System.out.println(l1); 
    System.out.println(l2); 
    LetterInventory sum = l1.add(l2); 
    System.out.println(sum); 
} 

} 

和輸出始終是[]無論我做什麼。我毫不猶豫地需要幫助。正如我花了這一天絕大多數試圖解決這個問題。

+0

你的代碼中有很多問題,但你看到空白輸出的主要原因是你的'toString()'實現。它使用'size'進行迭代,當你調用'add()'方法時它將爲0。 – Manish

+3

另外,你的add()方法對* other *的內容沒有任何作用。它完全忽略了傳入的變量。 – Kylar

+0

@Kylar未使用的參數是由於這只是一個狹隘的版本,完整的程序比這長得多。 – Stwest

回答

0

toString()方法的for循環有問題。您還沒有在任何參數的構造函數的值設置爲size變量爲0時,所以不會對循環執行

public String toString(){ 
    String result = "["; 
    for(int i = 0;i<=size-1;i++){ 
     int temp = array.get(i); 
     result += (char)temp; 
    } 
    return result += "]"; 
} 

更改add()方法如下面

public LetterInventory add(LetterInventory other){ 
    LetterInventory temp = new LetterInventory(); 
    temp.array.addAll(array); 
    temp.size = temp.array.size(); 
    return temp; 
} 
+0

新初始化的ArrayList的長度爲零。上面的代碼將大小設置爲零 – slipperyseal

+1

@SlipperySeal:已更正。 –

3

您正在跟蹤size與列表的實際大小分開。這在你的構造函數中是可以的,但你的add方法複製列表,但不設置大小。儘量不要使用大小變量,並使用array.size()這將永遠是正確的。

ps。您的添加方法中存在另一個錯誤,正如Kylar上面提到的

0

您的toString()方法使用成員size來遍歷數組元素。但是當你添加你沒有更新size

我的建議是,除去size成員變量和使用array.size()代替

0
public LetterInventory add(LetterInventory other){ 
    LetterInventory temp = new LetterInventory();  
    temp.array.addAll(this.array); 
    temp.array.addAll(other.array); 
    temp.size = this.size + other.size; 
    return temp; 
} 

這就是答案

+0

SlipperySeal的回答非常貼切。更好地使用list.size()而不是每次計算它。 – Anirudh

+0

謝謝你Anirudh。我確實有點惱火,它沒有被標記爲正確的:) – slipperyseal

相關問題