Java 模式迭代器
我有一个任务,它包括模式实现迭代器和在先前创建的类Hotel和Tours中添加方法迭代器。不幸的是,我对Java还是新手,所以我不知道如何使用IIterator for arraylist inter的方法。信息接口Java 模式迭代器,java,design-patterns,iterator,Java,Design Patterns,Iterator,我有一个任务,它包括模式实现迭代器和在先前创建的类Hotel和Tours中添加方法迭代器。不幸的是,我对Java还是新手,所以我不知道如何使用IIterator for arraylist inter的方法。信息接口 public class IIterator<T> implements Iterator<T> { private Object elements; int index = 0; public boolean hasNext(
public class IIterator<T> implements Iterator<T> {
private Object elements;
int index = 0;
public boolean hasNext() {
return index< Array.getLength(elements);
}
public T next() {
return (T) Array.get(elements, index++);
}
public void remove() {
throw new UnsupportedOperationException("remove");
}
}
public class Hotel implements Info, Serializable, Cloneable, Comparable{
public Iterator iterator() {
return new IIterator();
}
}
public class Tours implements Info, Serializable, Cloneable, Comparable{
public Iterator iterator() {
return new IIterator();
}
}
ArrayList<Info> inter = new ArrayList();
inter.add(new Hotel("Lara", 100, 5));
inter.add(new Hotel("Katya", 10, 1));
inter.add(new Tours("Lara", 1000, length));
inter.add(new Tours("HelsinkiPanorama", 1010, length));
编辑
您可以这样做:
for (Info info : inter) {
System.out.println(info.getString());
}
或
它打印:
hotel-0
hotel-1
hotel-2
hotel-3
hotel-0
hotel-1
hotel-2
hotel-3
如果你想在引擎盖下看到一个例子
public class Tours implements Iterable<Hotel>{
private int numHotels = 0;
private Hotel[] hotels = null;
public void addHotel(Hotel hotel){
if (hotels == null){
hotels = new Hotel[5];
} else if ( numHotels + 1 >= hotels.length){
hotels = Arrays.copyOf(hotels, numHotels + 5);
}
hotels[numHotels++] = hotel;
}
@Override
public Iterator<Hotel> iterator() {
return new HotelIterator();
}
private class HotelIterator implements Iterator<Hotel> {
private int index = 0;
@Override
public boolean hasNext() {
return index < numHotels;
}
@Override
public Hotel next() {
return hotels[index++];
}
}
}
它打印:
hotel-0
hotel-1
hotel-2
hotel-3
hotel-0
hotel-1
hotel-2
hotel-3
你的问题是什么?迭代器是列表的属性,而不是对象的属性。你需要详细说明。你想实现什么?对于IIterator itr=IIterator inter.iterator;itr.hasNext;System.out.printlnitr.next;它显示了一个错误问题是我不知道如何使用迭代器在这种情况下只有集合是可编辑的。这家旅馆是收藏品吗?如果是,那么它是一个什么样的集合?同样的问题也适用于旅游业。我需要在我的ArrayList ArrayList inter=新ArrayList中同时拥有酒店和旅游业;inter.addnew HotelLara,100,5;inter.addnew HotelKatya,10,1;inter.addnew ToursLara,1000,长度;inter.addnew Tourshelskinkipanorama,1010,长度;何处信息-Interface@JuliaK您必须发布您的信息界面。公共界面信息扩展可克隆、可编辑、可比较{int getInt;void setIntint reserved;int getMint r,int num;void setMint r,int num;String getString;void setStringString name;int fun;NameDto findString nmName,int nmrm,int length;对象克隆抛出CloneNotSupportedException;void outpututoutputstream out抛出IOException;void writer out抛出IOException;int[]getM;}
public static void main(String[] args) {
Tours tours = new Tours();
tours.addHotel(new Hotel("hotel-0"));
tours.addHotel(new Hotel("hotel-1"));
tours.addHotel(new Hotel("hotel-2"));
tours.addHotel(new Hotel("hotel-3"));
for (Hotel hotel : tours) {
System.out.println(hotel.getName());
}
}
hotel-0
hotel-1
hotel-2
hotel-3