我遇到了一个名为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。
答案 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];