• 0
  • cytuj |

  • Mam takie zadanie z Javy o Iteratorach (nie jestem zbytt dobry w programowaniu w tym języku a potrzebuje tego do godz. 14, może toś pomoże jesli potrafi...)

    Treść zadania:
    1) Zaimplementować wzorzec Iterator:

    - Zdefiniować klasę pomocniczą o nazwie MyItem, przechowującą dowolne dane
    (przykładowo: nazwę i wartość) i dodać do niej metodę toString()/ToString()
    (w Java/C# odpowiednio).

    - Zdefiniować klasę o nazwie MyItemCollection, która implementuje standardowy
    interfejs klasy iterowanej (w Java: Iterable, w C#: IEnumerable). Klasa
    ma przechowywać listę elementów typu MyItem i zawierać metodę do dodawania
    nowych elementów do tej listy (np. addItem(MyItem itm)).

    - Zdefiniować klasę o nazwie MyItemCollectionIterator, która implementuje
    standardowy interfejs iteratora (w Java: Iterator, w C#: IEnumerator). Zdefiniować
    ją jako prywatną klasę zagnieŜdŜoną klasy MyItemCollection i w konstruktorze przekazać
    jej referencję do MyItemCollection.

    - Zdefiniować klasę z metodą main/Main, która stworzy obiekty typu MyItem, doda
    je do kolekcji MyItemCollection i w pętli (foreach w C#, w Javie – pętla for z ‘:’)
    przeglądnie wszystkie jej elementy.

    2) Dodać zdarzenie, które zostanie wywołane w metodzie addItem() i poinformuje o tym,
    Ŝe kolekcja została zmodyfikowana:

    - Zdarzenie ma być przechwytywane w klasie zagnieŜdŜonej i ma powodować ustawienie
    w niej flagi, która przy próbie wywołania metody next() (interfejs iteratora) wywoła
    wyjątek NoSuchElementException/InvalidArgumentException
    ---------------------------------------------------------------------------
    Poniżej zamieszczam Klasy ktore stworzyłem (w BlueJ-u) - program jednak wyrzuca błedy, nie wiem jak je poprawić i co jest kompletnie źl w koddzie i trzeba by zamienić na coś innego (lub dodać może nowe klasy pomocnicze)
    --------------------------------------------------------------
    Klasa My_Item_Colection

    import java.util.*;
    public class MyItemCollection implements Iterable{

    public Iterator iterator()
    {
    return new MyItemCollectionIterator (MyItemCollectionIterator, Class MyItemCollection);
    }

    ArrayList MyItem = new ArrayList();

    public void addItem(MyItem item){
    MyItem.add(item);
    }

    /* definiujemy klase zagniezdzona */

    private class MyItemCollectionIterator implements Iterator{

    private Iterator it;

    public MyItemCollectionIterator(Iterator MyItemCollectionIterator, Class MyItemCollection){
    this.it = MyItemCollectionIterator;
    this.MyItemCollection=MyItemCollection;
    }

    public boolean hasNext(){
    return it.hasNext();
    }
    public Object next(){
    return it.next();
    }
    public void remove() {it.remove();}
    }


    }
    --------------------------------------------------------
    Klasa My_Item

    import java.util.*;

    public class MyItem{
    String nazwa;
    int wartosc;

    public MyItem(String nazwa, int wartosc){
    this.nazwa = nazwa;
    this.wartosc = wartosc;
    }

    public String toString(){
    return "nazwa: " +nazwa+ " wartosc: " +wartosc;
    }
    }
    ----------------------------------------------------
    Klasa_Main



    import java.util.*;
    public class Main{
    public static void main(){
    MyItemCollection obiekt = new MyItemCollection();


    for(int i = 0; i < 8 ; i++){
    MyItem item = new MyItem("cos", i);
    obiekt.addItem(item);
    }

    for (MyItem element : obiekt) System.out.println(element);
    }

    }
    -----------------------------------------

    Jakby znalazł się ktoś chętny pomóc byłbym wdzięczny :)
    d41d8cd98f00b204e9800998ecf8427e
  • 0
  • cytuj |

  • To moze po kolei.

    Klasa MyItem:
    dodaj pola: MyItem next i Object value,

    metody: setNext, getNext, getValue oraz setValue

    Iteratorowi jako argument przekazuj jedynie pierwszy element kolekcji, po której iterujesz i jego wykorzytstaj w konstruktorze. Przeciazanie metody np hasNext powinno wygladac tak:

    Kod:
    @Override
        public boolean hasNext() {
            return next != null;
        }


    w Object next() sprawdzaj warunkiem hasNext() czy jest nastepny element i jesli nie, to rzuc wyjatek NoSuchElementException.
    d41d8cd98f00b204e9800998ecf8427e

Powered by phpBB modified by Przemo © 2003 phpBB Group. Then, after many years modified again, this time by Piotrek © 2014
Strona wygenerowana w 16,3ms. Zapytań do SQL: 20