我的教授让我们修改她的实验室代码。特别是对于这个实验室,我的教授有一个println()声明,我不想触及:
ArrayCollection ac = new ArrayCollection(ARRAY_SIZE);
因此上面的代码实例化了一个名为ac的对象。哪个都很好,花花公子,但我的教授在她的代码中也有这个陈述,我无法修改:
System.out.println ("Collection contains: " + ac);
因此,由于上面这一行,我得到了以下无用的输出:
收藏包含: ArrayCollection {data = [Ljava.lang.Object; @ 24a20892,actualSize = 3}
上面的输出可以告诉我关于对象ac的信息?输出是完全无用的还是你认为这是我的教授本来想要的。对不起,我知道这是一个奇怪的问题,我很感激任何人的评论,为什么我的老师会像这样留下代码(她因为非常小的错误而获得分数>。<)。
编辑9:48 AM:
ArrayCollection ac包含:{5,10,20}用于我在上面发布的输出
答案 0 :(得分:1)
查看JDK中AbstractCollection
类的toString()方法。
public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
它会做你可能期望看到的。
如果您不想“复制”逻辑,请从ArrayCollection
继承AbstractCollection
或直接使用ArrayList
答案 1 :(得分:1)
@之后的十六进制数是对象的哈希码 - 如果是对象的引用。这可能是她感兴趣的自动化测试。
答案 2 :(得分:0)
显然,您的教授希望打印集合的内容,而不是集合的参考。
以下是您可以这样做的方法:
遍历集合的内容。
在此循环中,在每个对象上调用toString()
并在StringBuilder中累积结果字符串。
打印此StringBuilder。
答案 3 :(得分:0)
它没有用,它给你以下数据:
ArrayCollection{data=[Ljava.lang.Object;@24a20892, actualSize=3}
你能查看每个参数......?
她正在延长Collection或Collections等级。
编辑:是的,请看AbstractCollection
答案 4 :(得分:0)
这里发生的是println
输出ArrayCollection.toString()
的返回值,这里给出的信息(假设她的实现是可靠的),类ArrayCollection
至少有两个字段:data
类型Object[]
和actualSize
,可能是数字类型,此实例的值为3。
似乎有理由假设ArrayCollection
是Java的Collection
接口的实现,由一个包含实际元素的数组(data
)支持。
答案 5 :(得分:0)
表达式"Collection contains: " + ac
正在调用toString()
对象上的ac
方法,以获取ac
对象的字符串表示形式。每当使用+
将String与对象连接时,首先通过调用对象的toString()
方法将对象转换为String。
我认为您的老师希望您修改ArrayCollection
类,以便toString()
生成格式良好的字符串表示。