Lista 2 de Java (versao 1)

Problema 1

(reimplementação do problema 1 da lista 1, com reflexão e collections. ) Dado

class Animal { public String nome; abstract void fala(); } crie duas subsclasses Cao e Gato e implemente o metodo fala() para que eles imprimam:
nome diz: miau!
para Gato e
nome diz: au-au!
para Cao

Crie a classe Zoo

class Zoo { ... } para armazenar objectos da classe Animal, e implemente os metodos:

boolean insereAnimal(Animal x) que insere um animal no zoologico e retorna true, ou retorna false se aquele animal ja esta no zoologico.

Object[] separa() que separa os animais do zoologico em um array de 2 elementos, o primeiro um ArrayList dos Caes do zologico, e o segundo um ArrayList dos Gatos do zoologico. Use reflexão para determinar o tipo de animal.

Problema 2

Dado um arquivo "dados.txt" com uma palavra por linha, milhares de linhas. Implemente a classe Conta cujo main imprime todas as palavras que aparecem no arquivo, com a sua frequencia, na ordem decrescente de frequencias (e se frequencias iguais, ordene as palavras lexicamente)

Ex: palavras aa aa bb aa cc bb cc estão no arquivo, uma por linha. A saida deverá ser:

aa 3
bb 2
cc 2

Problema 3

Um grafo direcionado aciclico é representado no arquivo "grafo.txt" como
n
no-1 no-1.1 no-1.2 no-1.3 ... no-1.k
no-2 no-2.1 no-2.1 ... no-2.m
...
no-n ....
onde n é o numero de vertices do grafo, e cada um dos no- é um interio. A linha
no-2 no-2.1 no-2.1 ... no-2.l
diz que ha uma aresta de no-2 para no-2.1, outra aresta de no-2 para no-2.2, e assim por diante.

Por exemplo

3
1 2
3 1 2
representa o grafo de 3 vertices com arestas (1 2) (3 1) e (3 2).

Implemewnte a classe Grafo, cujo main le o arquivo e imprime uma ordenação topologica do grafo lido. Voce pode assumir (não precisa testar) que o grafo será aciclico e portanto terá pelo menos uma ordenação topologica.

No exemplo acima, o programa imprimiria

3 1 2