可以向我描述为什么我的迭代器不起作用。 JDeveloper说我必须为Iterator创建一个方法,但我不清楚程序对它的意义。因此我请求你的帮助。该计划如下:
TestOrder:
package hej;
import java.util.*;
public class TestOrder {
public static void main(String[] args) {
OrderRegister orderregister = new OrderRegister();
Order order1 = new Order("123","Kop");
Order order2 = new Order("456","Salj");
Order order3 = new Order("789","Kop");
orderregister.addOrder(order1);
orderregister.addOrder(order2);
orderregister.addOrder(order3);
System.out.println(orderregister.sokOrder("123").getKopsalj());
orderregister.raderaOrder("456");
Order tmpOrder = orderregister.sokOrder("456");
if (tmpOrder == null) {
System.out.println("Fungerar!");
}
else{
System.out.println("Why u lie?");
}
System.out.println(orderregister.sokOrder("123").getKopsalj());
orderregister.sokOrder("123").setKopsalj("Salj");
System.out.println(orderregister.sokOrder("123").getKopsalj());
Iterator<Order> i=orderregister.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
}
订单:
package hej;
import java.util.Iterator;
public class Order {
private String ordernr;
private String kopsalj;
public Order(String newOrdernr, String newKopsalj) {
setOrdernr(newOrdernr);
setKopsalj(newKopsalj);
}
public void setOrdernr(String ordernr) {
this.ordernr = ordernr;
}
public String getOrdernr() {
return ordernr;
}
public void setKopsalj(String kopsalj) {
this.kopsalj = kopsalj;
}
public String getKopsalj() {
return kopsalj;
}
public String toString()
{
return "Order: " + this.ordernr+", "+"Manover: "
+this.kopsalj;
}
}
OrderRegister:
package hej;
import java.util.ArrayList;
import java.util.Iterator;
public class OrderRegister {
private ArrayList<Order> orderArrayList;
public OrderRegister() {
orderArrayList = new ArrayList<Order>();
}
// Lagg till Order
public void addOrder(Order newOrder) {
orderArrayList.add(newOrder);
}
// Sok Order
public Order sokOrder(String ordernrSok) {
Order tmpOrder = null;
int i = 0;
boolean found = false;
while (i < orderArrayList.size() && !found) {
tmpOrder = orderArrayList.get(i);
if (tmpOrder.getOrdernr().equals(ordernrSok)) {
found = true;
}
i++;
}
if (!found) {
tmpOrder = null;
}
return tmpOrder;
}
// Ta bort Order
public void raderaOrder(String ordernrRadera) {
Order tmpOrder = null;
int i = 0;
boolean found = false;
while (i < orderArrayList.size() && !found) {
tmpOrder = orderArrayList.get(i);
if (tmpOrder.getOrdernr().equals(ordernrRadera)) {
orderArrayList.remove(i);
found = true;
}
i++;
}
}
// andra Orderuppgifter
public void setOrderUppgifter(String ordernr, String newKopsalj){
Order order = sokOrder(ordernr);
if (order != null) {
order.setKopsalj(newKopsalj);
}
}
}
答案 0 :(得分:3)
您需要让OrderRegister
班级实施Iterable。
T
是迭代器数据类型,在您的情况下为Order
。
所以你得到:
public class OrderRegister implements Iterable<Order>
Iterable
接口要求您定义一个返回Iterator<E>
对象的iterator()
方法。在您的情况下,您不需要创建这样的类,因为您可以直接从ArrayList
获取迭代器对象:
public Iterator<Order> iterator() {
return orderArrayList.iterator();
}
现在您可以这样使用您的课程:
for(Order order: orderregister) {
System.out.println(order.getKöpsälj());
}
注意:您的while
- 循环仍然有效
答案 1 :(得分:0)
请参阅http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Iterator.html。
对于每个迭代器,您需要实现hasNext,next和remove方法。
另外,您的类orderregister没有任何方法iterator()。您需要继承已经实现它的类,或者您需要自己实现它。
答案 2 :(得分:0)
让OrderRegister实现Iterable接口并实现迭代器而不是()
你可以委托给orderArrayList.iterator()
答案 3 :(得分:0)
我认为你的问题就在这一行:
Iterator<Order> i=orderregister.iterator();
因为您的班级iterator()
中没有方法OrderRegister
。
两种解决方案:
A)添加方法iterator()
(它可能只做return orderArrayList.iterator();
)
B)而不是包裹ArrayList
,扩展它!
public class OrderRegister extends ArrayList<Order> {
// No more orderArrayList!
}