我正在尝试将带有for循环的对象添加到Java中的泛型数组中。我有点想用Iterable接口实现Iterator,但我不知道怎么做。在下面的代码中,每当我将它打印到控制台时,我得到以下输出:" package.ArrayObjects@3343c8b3"
代码:
public class ArrayObjects<E> implements SomeImp<E>{
private E[] array;
private int maxCapacity, currentSize;
public ArrayObjects(){
currentSize = 0;
maxCapacity = 100;
array = (E[]) new Object[maxCapacity];
}
public void addAtEnd(E obj){
//array.add(obj); -> Cannot invoke add(E) on the array tipe E[ ]. Do you know why?
list[currentSize++] = obj;
}
}
我的循环:
for(int i=1; i <= 10; i++)
array.addAtEnd(i);
System.out.println("Should print 1 .. 10");
System.out.println(list);
编辑:我想用它来循环打印,但它只能用于Iterable对象..(我该怎么做?)
for(int x : list)
System.out.print(x + " ");
我该如何解决这个问题?你知道如何实现迭代器循环遍历数组吗?我必须声明我的类还实现了Iterator吗?
感谢您的帮助!
答案 0 :(得分:0)
我该如何解决这个问题?
阅读Object.toString()
方法的javadoc。那是什么习惯了#34;格式&#34;用于输出的数组list
。
然后查看静态方法Arrays.toString(Object[])
的javadoc。这可能是格式化数组以提供您正在寻找的输出类型的最简单方法。
你知道如何实现Iterator循环遍历数组吗?
这可以通过以上方式提出......但您可以通过几种简单的方式迭代数组:
for (int i = 0; i < list.length; i++) {
// iterates over the array indexes
}
for (e E : list) {
// iterated over the array elements
}
(这是所有Java 101的东西...... 应已被您的老师/教科书/教程所涵盖)
我必须声明我的类还实现了Iterator吗?
这是另一种方法......等等。
实际上,您应该使您的类实现Iterable
...这意味着添加Iterator<E> iterator()
方法,并实现它以返回具有所需语义的迭代器对象。一种快速而肮脏的方法是使用Arrays.asList
将数组包装在List
中,然后返回List
的迭代器。
如果您的班级直接实施了Iterator
,那么您只能迭代元素一次......因为Iterator
API无法再次启动。
另一个问题是您的现有代码似乎正在更新不属于list
类成员的ArrayObjects
对象。这对我来说并没有多大意义。但假设它是有意的,那么你的ArrayObjects
是一个漏洞抽象,使用Iterable
是非常值得怀疑的。