ArrayList <integer> addAll方法不添加</integer>

时间:2014-02-14 04:49:16

标签: java eclipse collections arraylist

我试图将this.array的内容添加到临时数组,但是当我打印返回值时,它总是为空。

类对象

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);
}

}

无论我做什么,输出总是[]。我不需要帮助。正如我今天绝大多数时间都在努力解决这个问题。

4 个答案:

答案 0 :(得分:3)

您正在跟踪size与列表的实际大小分开。这在构造函数中没问题,但是您的add方法复制了列表,但没有设置大小。尽量不要使用大小变量并使用array.size(),这将始终是正确的。

PS。如上面的Kylar所述,你的add方法中还有另一个错误

答案 1 :(得分:0)

toString()方法使用成员size迭代数组元素。但是当你添加时,你没有更新size

我的建议是删除size成员变量,然后使用array.size()

答案 2 :(得分:0)

您的toString()方法的for循环存在问题。在没有参数的构造函数中,没有将值设置为size变量而不是0,因此它不会执行for循环

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;
}

答案 3 :(得分: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;
}

这是答案