【发布时间】:2015-03-27 14:45:50
【问题描述】:
我遇到了一个名为 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。
【问题讨论】:
-
你是否覆盖了 java.lang.Object 中的 toString() 方法?
-
正如@JBNizet 所说,如果您想使用已经在使用“System.out.println(a1);”的调用,则必须覆盖默认的 toString() 方法。如果您尝试实现自己的 toString() 方法,请按照下面 Jean_Franscois 的回答中的说明进行操作。
-
我不想让你气馁;但是您的代码中有许多(或多或少)微妙的问题。它始于违反命名约定;然后有很多语句没有效果;就像你的构造函数中的
Object[] array = new Object[]{null,null,null,null,null};。您没有初始化您的成员数组;你正在初始化一个语言环境变量......只要构造函数离开,它就会消失。含义:那里有很多错误... -
@EddyG 是的,我知道我遇到了更多问题,但如果我更喜欢在拉出错误之前能够看到的话。您提到的错误出现在我的下一部分中;
public Object get(int a) { if (a < 0 || a >= logicalSize) { throw new IndexOutOfBoundsException("Positions must be from position 0 to position "+(logicalSize - 1)); } else { return array[a]; } }但是我的private static Object[] array = new Object[0];声明不应该解决这个问题吗?