-
-
-
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
-
-
-
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
|