(Created page with "{{TOCright}} == Problema == Modele em UML e implemente a classe '''NameList''' que contém um número fixo de nomes (cadeias de caracteres), es- pecificado na altura da criaç...") |
(→Solução) |
||
Line 38: | Line 38: | ||
public Iterator reverseIterator() { return new ReverseIterator(); } | public Iterator reverseIterator() { return new ReverseIterator(); } | ||
− | private ForwardIterator implements Iterator { | + | private class ForwardIterator implements Iterator { |
private int _index = 0; | private int _index = 0; | ||
public boolean hasNext() { return _index < _entries.length; } | public boolean hasNext() { return _index < _entries.length; } | ||
Line 44: | Line 44: | ||
} | } | ||
− | private ReverseIterator implements Iterator { | + | private class ReverseIterator implements Iterator { |
private int _index = _entries.length - 1; | private int _index = _entries.length - 1; | ||
public boolean hasNext() { return _index >= 0; } | public boolean hasNext() { return _index >= 0; } |
Contents |
Modele em UML e implemente a classe NameList que contém um número fixo de nomes (cadeias de caracteres), es- pecificado na altura da criação de cada instância da lista. A classe NameList, além de outros, possui dois métodos, forwardIterator() e reverseIterator(), que retornam instâncias de duas classes internas que implementam a interface Iterator definida da seguinte forma:
public interface Iterator {
boolean hasNext();
String next();
}
O método forwardIterator() retorna um iterador que permite percorrer os elementos da lista do início para o fim. O método reverseIterator() retorna um iterador que permite percorrer os elementos da lista do fim para o início. Para o seguinte exemplo, a saída é MariaJoãoPedroPedroJoãoMaria.
public class App {
public static void main(String[] args) {
NameList list = new NameList(3);
// definição do conteúdo omitida por simplicidade (e.g. [ "Maria", "João", "Pedro" ])
Iterator i1 = list.forwardIterator();
while (i1.hasNext()) System.out.print(i1.next());
Iterator i2 = list.reverseIterator();
while (i2.hasNext()) System.out.print(i2.next());
}
}
Defina as duas classes internas, assim como as outras partes da classe NameList necessárias para suportar o funcionamento das classes internas e a especificação acima. Note-se que a interface mencionada não é a nativa do Java.
NameList.java |
---|
public class NameList {
private String[] _entries;
public NameList(int nentries) { _entries = new String[nentries]; }
public Iterator forwardIterator() { return new ForwardIterator(); }
public Iterator reverseIterator() { return new ReverseIterator(); }
private class ForwardIterator implements Iterator {
private int _index = 0;
public boolean hasNext() { return _index < _entries.length; }
public String next() { return _entries[_index++]; }
}
private class ReverseIterator implements Iterator {
private int _index = _entries.length - 1;
public boolean hasNext() { return _index >= 0; }
public String next() { return _entries[_index--]; }
}
}
|