Classes Internas (Java)/Exercício 03: Iteração: Difference between revisions
From Wiki**3
Created page with "{{TOCright}} == Problema == Modele em UML e implemente a classe '''Menu''' que contém um número fixo de pratos (cadeias de caracteres), especificado na altura da criação d..." |
|||
| (5 intermediate revisions by the same user not shown) | |||
| Line 6: | Line 6: | ||
<source lang="java"> | <source lang="java"> | ||
public interface Iterator { | public interface Iterator { | ||
boolean hasNext(); | |||
String next(); | String next(); | ||
} | } | ||
| Line 28: | Line 28: | ||
= Solução = | = Solução = | ||
{{CollapsedCode|Menu.java| | |||
<source lang="java"> | |||
public class Menu { | |||
private String[] _entries; | |||
public Menu(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++]; } | |||
} | |||
[[category:Ensino]] | private class ReverseIterator implements Iterator { | ||
private int _index = _entries.length - 1; | |||
public boolean hasNext() { return _index >= 0; } | |||
public String next() { return _entries[_index--]; } | |||
} | |||
} | |||
</source> | |||
}} | |||
[[category: Ensino]] | |||
[[category:PO]] | [[category:PO]] | ||
[[category:PO Exemplos]] | [[category:PO Exemplos]] | ||
Latest revision as of 22:12, 28 September 2023
Problema
Modele em UML e implemente a classe Menu que contém um número fixo de pratos (cadeias de caracteres), especificado na altura da criação de cada instância da lista. A classe Menu, 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 do menu do início para o fim. O método reverseIterator() retorna um iterador que permite percorrer os elementos do menu do fim para o início. Para o seguinte exemplo, a saída é SopaSaladaDoceDoceSaladaSopa.
public class App {
public static void main(String[] args) {
Menu menú = new Menu(3);
// definição do conteúdo omitida por simplicidade (e.g. [ "Sopa", "Salada", "Doce" ])
Iterator i1 = menu.forwardIterator();
while (i1.hasNext()) System.out.print(i1.next());
Iterator i2 = menu.reverseIterator();
while (i2.hasNext()) System.out.print(i2.next());
}
}
Defina as duas classes internas, assim como as outras partes da classe Menu 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.
Solução
| Menu.java |
|---|
public class Menu {
private String[] _entries;
public Menu(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--]; }
}
}
|