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 |
Iterator<Item> itr = saco.iterator();
while (itr.hasNext()) {
Item x = itr.next();
... // processamento de x
}
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.
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.