Livro de Sedgewick e Wayne: sec.1.3, p.120. Website do livro: resumo sec.1.3, slides. Veja também a página algs4.cs.princeton.edu/code/, que tem o código fonte, a documentação, e dados de teste de todos os programas do livro.
Resumo:
Pré-requisitos:
| public class Bag<Item> implements Iterable<Item> | ||
| Bag() | cria um saco de Items vazio | |
| void | add(Item item) | coloca item neste saco |
| Iterator<Item> | iterator() | um iterador que percorre os itens do saco |
| boolean | isEmpty() | este saco está vazio? |
| int | size() | número de Items neste saco |
O método iterator() implementa a
operação iterate:
para processar, um a um,
todos os itens de uma instância saco de Bag,
um cliente deve dizer
Iterator<Item> itr = saco.iterator();
while (itr.hasNext()) {
Item x = itr.next();
... // processamento de x
}
Felizmente, o cliente pode abreviar esse bloco de código por
uma instrução muito simples
conhecida como foreach:
for (Item x : saco) {
... // processamento de x
}
(Leia
para cada x no saco faça ...
.)
public class Stats {
public static void main(String[] args) {
Bag<Integer> bag = new Bag<Integer>();
while (!StdIn.isEmpty())
bag.add(StdIn.readInt());
int N = bag.size();
double soma = 0.0;
for (int x : bag)
soma += x;
double media = soma/N;
soma = 0.0;
for (int x : bag)
soma += (x - media)*(x - media);
double desvpad = Math.sqrt(soma/(N-1));
StdOut.printf("Media: %.2f\n", media);
StdOut.printf("Desv padrao: %.2f\n", desvpad);
}
}
% javac Stats.java % java Stats < randAints10K.txt Media 26.80 Desv padrao: 8.16 % java Stats < randBints10K.txt Media 26.65 Desv padrao: 6.24
import java.util.Iterator;
public class Bag<Item> implements Iterable<Item> {
private Node first;
private class Node {
private Item item;
private Node next;
}
public Bag() { // construtor
first = null;
}
public void add(Item item) {
Node oldfirst = first;
first = new Node();
first.item = item;
first.next = oldfirst;
}
public Iterator<Item> iterator() {
return new ListIterator();
}
private class ListIterator implements Iterator<Item> {
private Node current = first;
public boolean hasNext() {
return current != null;
}
public Item next() {
Item item = current.item;
current = current.next;
return item;
}
}
}
implements Iterable<Item>ao declarar a classe Bag.
profissional; veja também a API correspondente.
Escreva uma implementação de saco em um
vetor com redimensionamento.
Depois de escrever seu código, confira com
código de ResizingArrayBag
no website livro.
Veja também a
correspondentes APIs.
Resposta: Integer é uma classe-invólucro (= wrapper class) que corresponde ao tipo primitivo int. Ao contrário de uma variável do tipo int, um objeto da classe Integer pode ter valor null.
Java converte Integer em int, e vice-versa automaticamente quando necessário. (Veja, por exemplo, a linha de código int x = itr.next().) Essas conversões são conhecidas como autoboxing e autounboxing.