| |
1) Contando linhas
Consider o seguinte programa (do tutorial), que conta os
caracteres de input.
class Count {
public static void main(String[] args)
throws java.io.IOException
{
int count = 0;
while (System.in.read() != -1)
count++;
System.out.println("Input has " + count + " chars.");
}
}
- compile e execute o programa
- A excepção IOException é atirada pelo método read(). Descubra isto
na documentação da API Java. Dica: o nome completo de System é java.lang.System...
- Altere o programa para, além do nº de caracteres, escrever também o número de
linhas.
2) Ajudante de Totoloto
Faça uma aplicação em Java que:
- Declare um Array de inteiros, e os preencha com 6 nºs pseudo-random,
diferentes, entre 1 e 45. Para gerar os inteiros, procure métodos (round(), random())
na API, em java.lang.Math
- Imprima o conteúdo do Array
3) Um Array de objectos
class Empregado
{ public Empregado(String n, double s)
{ nome = n;
salario = s;
}
public void mostra()
{ System.out.println(nome + ", ganha " + salario + " patacos.");
}
public void aumentaSalario(double byPercent)
{ salario *= 1 + byPercent / 100;
}
public String nome;
public double salario;
}
Dada esta classe, faça um programa (i.é, escreva um método de classe main(),
numa nova classe TestePessoal) que:
- Declare um Array destes objectos, e o preencha com alguns Empregados.
- Imprima o conteúdo do Array, com base no comportamento já definido para os Empregados.
- Dê um aumento razoável a toda a gente.
- Imprima o Array novamente.
Depois de realizar e testar os pontos anteriores, transforme o programa num Applet:
- Mude a declaração da classe TestePessoal para "TestePessoal extends
Applet"
- Adapte o método de classe main(), transformando-o em start()
- Escreva um ficheiro HTML com uma tag APPLET que carregue o seu Applet. Inspire-se por
exemplo aqui.
- Teste o programa com o seu browser WWW (a consola aparecerá numa janela à parte)
4) Uma pilha de objectos
- Escreva uma classe Pilha cujos objectos funcionem como pilhas LIFO, com um
conjunto de elementos (eles próprios objectos) representado num Array, e com
operações empilhar(), tirar() e imprimir().
- Faça um programa de teste, com uma classe adicional TestePilha que usa a
anterior, e que mostre vários estados da pilha. Lembre-se que os objectos na Pilha
respondem necessariamente à mensagem toString()
- Escreva uma classe Lista, cujos objectos representam elementos duma lista
encadeada, e mude a definição de Pilha por forma a usá-la, em vez do Array
5) Uma rede de objectos
Eis um Applet que corre, mas incompleto. O seu aspecto actual é assim:
A sua source é:
import java.awt.*;
import java.applet.Applet;
public class TestePessoal extends Applet {
List lista;
Empregado[] pessoal = new Empregado[20];
public void init()
{
lista = new List(6,false); // 6 elementos visiveis
setLayout(new BorderLayout());
add("Center",lista);
add("North",new Label("Lista:"));
/* Para colocar strings na lista no ecrã:*/
lista.addItem("Hello");
lista.addItem("World");
}
}
class Empregado
{ public Empregado(String n, double s)
{ nome = n;
salario = s;
}
public String toString()
{ return nome;
}
public void aumentaSalario(double byPercent)
{ salario *= 1 + byPercent / 100;
}
String nome;
double salario;
}
class Gerente extends Empregado
{
Empregado ajudante;
public Gerente(String n, double s)
{ super(n,s);
ajudante = null;
}
public Gerente(String n, double s, Empregado a)
{ super(n,s);
ajudante=a;
}
public String toString()
{ return nome + "(Gerente)";
}
}
Os objectos destas classes representam Empregados e Gerentes duma
empresa; além de nome e salario, os últimos podem ter um ajudante,
que é outro Empregado que os ajuda, secretaria, etc. Este por sua vez pode ou
não ter ajudante, e assim sucessivamente.
- Altere o Applet TestePessoal, por forma a criar um conjunto de Empregados
e Gerentes num Array, especificando alguns como ajudantes de outros, e coloque os
nomes na lista do Applet
- Altere o applet para que juntamente a cada nome apareça a indicação "tem
ajudante ...", e assim sucessivamente.
- Implemente um método custa() em Empregado (e outro em Gerente...),
que retorna a soma dos salários dum Empregado, e (recursivamente) do(s) seu(s)
ajudante(s). Assuma que se alguém serve de ajudante a várias pessoas, o custo é
imputado integralmente a cada uma delas.
- Altere o programa por forma a que a listagem inclua esta informação de custo por Empregado.
- Implemente um método custo2(), só em Empregado, que
dê a mesma funcionalidade dos métodos custo() anteriores
- Desenhe num diagrama os objectos que existem em memória ao acabar a execução do
programa, e as referências entre eles; não inclua neste diagrama os objectos gráficos.
6) Edição duma pilha
Escreva uma classe JanelaComPilha que mostre uma Pilha numa List, e permita desempilhar
(com um Button) e empilhar (o conteúdo dum TextField) em reacção a outro Button
- Com objectos AWT: List, Button, TextField
- Com objectos Swing: JList, ListModel, JButton, JTextfield
- Acrescente menus para guardar e carregar uma Pilha, sob a forma dum ficheiro
7) Variações sobre um calendário
Alterar este Applet, sem
alterar a classe original Calendar :
- Traduzir para Português
- Acrescentar os dias da semana em cabeçalho.
- Acrescentar uma grelha
- Acrescentar a capacidade de detectar mouseDown numa data, e mostrá-la num Component
abaixo do calendário (por exemplo sob a forma "5 de Dezembro de 1997").
- Acrescentar parâmetro opcional ao Applet para especificar um ano e mês inicial.
8) Variações sobre um visualizador de grafos
Aqui encontra-se um vizualizador de
grafos, source e documentação. Experimente-o, estude as suas opções, dê uma vista de
olhos na documentação, e na source: nomeadamente métodos de criação da interface, de
desenho e de tratamento de eventos.
Depois, sem alterar nenhuma das 4 classes dadas, escreva (novas) sub-classes das
anteriores por forma a que:
- Apareça numa Label no applet o valor digital do "delay" controlado pela
Scrolbar
- Exista uma Checkbox adicional "Show iterations", que determine se aparece ou
não a contagem de iterações no GraphPanel
- Os nós do grafo apareçam mais bonitos, com rectangulos de cantos arredondados (ou
outra alteração cosmética a seu gosto :)
- Ao premir o rato sobre um nó X, e só enquanto o botão do rato estiver premido (ou
seja, sse X.isPicked for verdade) aquele além do seu label mostre o nº N dos seus
vizinhos. Por exemplo, para um nó X com 3 vizinhos: "X(3)". Preferem-se
soluções que calculem o nº de vizinhos "just-in-time". Pista: Node passe a conhecer
o GraphPanel em que está.
- Acrescentar ao Applet uma TextArea onde introduzir a especificação do grafo, e um
botão para inicializar o GraphPanel com ela. Depois experimente com os vários grafos que
estão nos vários ficheiros HTML aqui.
- Criar uma classe GraphWindow (extends Frame) onde passem a estar os objectos visiveis do
applet, e escreva um novo applet só com um botão para criar instancias de GraphWindow.
Assim conseguirá visualizar vários grafos simultâneamente...
9) Variações sobre uma árvore
- Usando a classe Arvore aqui
escreva uma classe JanelaComArvore que constroi uma Arvore e a mostra num campo de texto.
- Acrescente um menu à JanelaComArvore por forma a fazer aparecer uma JanelaComArvore2,
que mostra a Arvore numa JTree; definir uma classe ModeloDeArvore que implemente TreeModel
- Construir uma Arvore definida pela relação binária entre empregados e supervisores,
na tabela employees (employeeID, reportsTo) na base de dados Northwind no SQL Server.
- Usando classes para análise de HTML (por exemplo as usadas neste programa), construir uma Arvore a partir da visita
a um site WWW, mostrá-la e permitir concatenar os textos das páginas visitadas num novo
ficheiro HTML
|