-1

イテレータが機能しない理由を説明できます。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);
    }
}
}
4

4 に答える 4

3

クラスにIterableOrderRegisterを実装させる必要があります。 あなたの場合のイテレータデータ型です。したがって、次のようになります。TOrder

public class OrderRegister implements Iterable<Order>

インターフェイスでは、オブジェクトを返すメソッドIterableを定義する必要があります。あなたの場合、から直接イテレータオブジェクトを取得できるので、そのようなクラスを作成する必要はありません:iterator()Iterator<E>ArrayList

public Iterator<Order> iterator() {
   return orderArrayList.iterator();
}

これで、クラスを次のように使用できます。

for(Order order: orderregister) {
    System.out.println(order.getKöpsälj());
}

注: while-loop も引き続き機能します

于 2013-01-10T12:07:30.200 に答える
0

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Iterator.htmlを参照してください。

イテレータごとに、メソッド hasNext、next、remove を実装する必要があります。

さらに、クラス orderregister にはメソッド iterator() がありません。すでに実装されているクラスから継承するか、自分で実装する必要があります。

于 2013-01-10T12:05:29.820 に答える
0

let OrderRegister は Iterable インターフェイスを実装し、iterator than() を実装します

そこで、 orderArrayList.iterator() に委譲することができます

于 2013-01-10T12:07:25.037 に答える
0

あなたの問題は次の行だと思います:

Iterator<Order> i=orderregister.iterator();

iterator()クラスにメソッドがないためOrderRegisterです。

2 つのソリューション:

A)メソッドを追加しますiterator()(おそらくそれで十分ですreturn orderArrayList.iterator();

B) をラップする代わりにArrayList拡張してください!

public class OrderRegister extends ArrayList<Order> {
    // No more orderArrayList!
}
于 2013-01-10T12:08:10.903 に答える