Hej, przerabiam sobie książkę z Javy i zastanawiam się czy zrobiłem poprawnie zadanie(a dokładniej zadanie, na które składają się dwa zadania).
Jeśli komuś chciałby się rzucić okiem i powytykać błędy to będę wdzięczny, treści zadań:
- Zaimplementuj klasę Queue, nieograniczoną kolejkę ciągów znaków. Dodaj metodę add, która dodaje element na końcu oraz metodę remove usuwającą element z początku kolejki. Zapamiętuj elementy w postaci połączonej listy węzłów. Zaimplementuj Node jako klasę zagnieżdżoną. Czy powinna ona być klasą statyczną ?
- Dla kolejki z poprzedniego ćwiczenia utwórz iterator - obiekt, który zwraca po kolei elementy z kolejki. Zaimplementuj Iterator jako klasę zagnieżdżoną z metodami next i hasNext. Dodaj metodę iterator() w klasie Queue, która zwróci obiekt Queue.Iterator. Czy iterator powinien być statyczny?
Czy powinna ona(Node) być klasą statyczną ?
Czy iterator powinien być statyczny?
Moja odpowiedź: No raczej tak, skoro w treści ćwiczeń pisze, że ma być to klasa zagnieżdżona, to musi być static, bo bez static byłaby to klasa wewnętrzna, tak ?
A tutaj to co udało mi się napisać:
import java.util.ArrayList;
public class Queue {
private ArrayList<Node> lista = new ArrayList<>();
public void add(String s) {
Node newNode = new Node();
if(lista.size() == 0)
newNode.previous = null;
else {
newNode.previous = lista.get(lista.size() - 1);
newNode.previous.next = newNode;
}
newNode.next = null;
newNode.text = s;
lista.add(newNode);
}
public void remove() {
if(lista.size() == 0)
System.err.println("Operacja nie powiodła się.. Kolejka jest pusta.");
else if(lista.size() == 1)
lista.remove(0);
else {
lista.get(1).previous = null;
lista.remove(0);
}
}
public Iterator iterator() {
Iterator newIterator = new Iterator();
newIterator.iteratorList = lista;
return newIterator;
}
public static class Iterator {
private ArrayList<Node> iteratorList;
private static int position = 0;
public String next() {
if(iteratorList.get(position).next != null) {
position++;
return iteratorList.get(position-1).text;
}
else
return "Kolejka się skończyła";
}
public boolean hasNext() {
if(iteratorList.get(position).next != null)
return true;
else
return false;
}
}
public static class Node {
private Node previous;
private Node next;
private String text;
public Node() {
}
public Node(Node previous, Node next, String text) {
this.previous = previous;
this.next = next;
this.text = text;
}
}
}