【问题标题】:How to print an arrayList object's values instead of its location如何打印 arrayList 对象的值而不是其位置
【发布时间】: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 &lt; 0 || a &gt;= 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]; 声明不应该解决这个问题吗?

标签: java object arraylist


【解决方案1】:

因为您调用的是默认方法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];

【讨论】:

  • 啊,谢谢。我完全错过了我试图将它传递给一个数组。我扩展到 Object[] array = new Object[]{null,null,null,null,null};尝试让任何事情都发挥作用
  • @Packerfan504 如果要打印类的数组,只需将签名更改为toString(),无需在参数中重新传递类对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多