如何打印arrayList对象的值而不是其位置

时间:2015-03-27 14:45:50

标签: java object arraylist

我遇到了一个名为arrayList的类的问题,该类表示一个对象列表,并支持通过数字位置索引随机访问其对象。

toString方法应该构建并返回一个字符串,该字符串包含当前在数组中可访问的对象的字符串表示形式,并且当逻辑大小为0时;字符串是空的。

我使用测试器类来调用arrayList类。

public class Tester {
    public static void main(String [] args) {
        arrayList a1, a2;
        a1 = new arrayList();
        a2 = new arrayList(5);
        a2.size();
        System.out.println(a1.toString());
        //System.out.println(a2.toString());
    }
}

public class arrayList {
    private int logicalSize;
    private static Object[] array = new Object[0];
    private Object[] original;
    private Object removedElement;

    public arrayList() {
        Object[] array = new Object[]{null,null,null,null,null}; 
    }

    public arrayList(int i) {
        logicalSize = i;
        Object[] array = new Object[logicalSize - 1];
    }

    public arrayList(Object[] array) {
        logicalSize = array.length;
        Object[] copyArray = array;
    }

    @Override
    public String toString(Object[] array) {
        String str = " ";

        for(int a = 0; a < logicalSize; a++) {
            str = str + array[a];
        }

        str = str + "\nSize: " + size();
        return str;
    }  

    public int size() {
        int length = array.length;
        return length;
    }
}

运行上面的代码时,我得到“arrayList @(memmorylocation)”。

我只使用单维数组(其他部分用于后续部分)并尝试了各种方法来使其打印除了位置之外的任何内容,包括删除应该从toString打印出值的循环,以及这样做的:

System.out.println(a1);

而不是:

System.out.println(a1.toString());

但无论我改变什么,我仍然打印出它的位置,而不是它的价值。

如何打印值而不是位置?我正在使用BlueJ IDE。

1 个答案:

答案 0 :(得分:2)

因为您调用默认方法toString而不是您定义的方法。

System.out.println(a1.toString());

您的方法应该接收一个数组作为参数:

public String toString(Object[] array)

所以传入数组,或者正确覆盖toString()方法。请注意,使用@Override注释会告诉您没有覆盖该方法,这可能会让您避免这种误解。

顺便说一句,按照惯例,java类应该以大写开头。因此,按照惯例,您应该为ArrayList中已存在的类java.util命名(您可能知道)。您应该更改类的名称以获得更合适的名称。

这种语法令人反感:

Object[] array = new Object[]{null,null,null,null,null}; 

你想改为:

Object[] array = new Object[5];