UNIVERSIDADE FEDERAL DE SÃO PAULO
CAMPUS SÃO JOSÉ DOS CAMPOS
DEPARTAMENTO DE CIÊNCIA E TECNOLOGIA (DCT)
PROGRAMAÇÃO ORIENTADA A OBJETOS I
Lista de Exercícios – Vetores, Coleções, Estruturas de Dados
1. Escreva um programa que lê uma sequência de números positivos dada pelo usuário e imprima
os mesmos números ordenados ascendentemente. O usuário entrará com 0 para marcar o fim da
entrada. Assuma que no máximo 100 números serão lidos.
2. Escreva um programa que, dado um vetor de doubles, retorna a média dos números no vetor.
3. Suponha uma classe Funcionário definida como segue (métodos get e set omitidos):
public class Funcionario {
private String sobreNome;
private String nome;
private double salarioHora;
private int anosNaEmpresa;
}
Escreva um método nesta classe que, dado um vetor de funcionários e um número X de anos (os
parâmetros do método), imprima o nome, sobrenome e salário de cada funcionário no vetor que
esteve na empresa por X anos ou mais.
4. Escreva um método que encontra o maior inteiro de um vetor de inteiros.
5. Qual é a saída do seguinte trecho de código?
char[][] pic = new char[6][6];
for (int i = 0; i < 6; i++)
for (int j = 0; j < 6; j++) {
if ( i == j || i == 0 || i == 5 )
pic[i][j] = ’*’;
else
pic[i][j] = ’.’;
}
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++)
System.out.println(pic[i][j]);
System.out.println();
}
6. Suponha que uma lista ligada de inteiros é criada a partir de objetos da seguinte classe:
public class No {
private int dado; / / Um item da l i s t a
private No prox; / / Ponteiro para o próximo
}
1
Crie os métodos para inserir, remover e buscar um nó na lista. Escreva um método que cria uma
cópia de uma lista com a ordem invertida dos itens da lista. O método deve receber uma lista (No)
e retornar uma lista (No). A lista original não deve ser modificada. Escreva também um método
que retorna a soma dos inteiros de uma lista.
Crie um método main() para testar as funcionalidades da classe.
7. Considere o seguinte método:
static void imprimeAlgo(int nível) {
if (nivel == 0) {
System.out.print("*");
} else {
System.out.print("[");
imprimeAlgo(nivel - 1);
System.out.print(",");
imprimeAlgo(nivel - 1);
System.out.println("]");
}
}
Mostre as saídas que seriam produzidas pelas chamadas imprimeAlgo(0), imprimeAlgo(1),
imprimeAlgo(2), e imprimeAlgo(3).
8. Suponha que uma árvore binária pode ser criada a partir de objetos da seguinte classe:
class NoDeArvore {
int item; / / Um item na árvore .
NoDeArvore esquerda; / / Pont . sub−árvore esquerda .
NoDeArvore direita; / / Pont . sub−árvore d i r e i t a .
}
Escreva métodos para inserir, remover e buscar um elemento na árvore. Crie também um método
recursivo que encontra a soma dos itens de uma árvore. Seu método deve ter um parâmetro do tipo
NoDeArvore e deve retornar um inteiro.
9. Crie uma classe Pilha com os métodos pop, push e top (retorna o topo da Pilha) a partir de
uma LinkedList (ou seja, sua classe deve ter um atributo do tipo LinkedList que armaze-
nará o conteúdo da pilha). Observação: não utilize os métodos pop e push já oferecidos por
LinkedList; a pilha deve funcionar com objetos de qualquer tipo.
10. Crie uma classe Fila com os métodos enfileira, desenfileira e vazio (verifica se a fila está vazia) a
partir de uma LinkedList. A fila deve funcionar com objetos de qualquer tipo.
11. Crie uma classe que gera um vetor de doubles aleatórios. O construtor da classe deve receber
um inteiro que corresponde ao tamanho do vetor.
12. Dadas as seguintes classes Cat e Dog, corrija o programa para que não ocorra o ClassCastException.
public class Cat {
private int catNumber;
public Cat(int i) { catNumber = i; }
public void id() {
System.out.println("Cat #" + catNumber);
}
}
2
public class Dog {
private int dogNumber;
public Dog(int i) { dogNumber = i; }
public void id() {
System.out.println("Dog #" + dogNumber);
}
}
public class CatsAndDogs {
public static void main(String[] args) {
List cats = new ArrayList();
for(int i = 0; i < 7; i++)
cats.add(new Cat(i));
cats.add(new Dog(7));
for(int i = 0; i < cats.size(); i++)
((Cat)cats.get(i)).id();
}
}
13. Escreva uma classe ContadorDePalavras baseada na classe ListaDePalavras abaixo que, além de
armazenar palavras, armazene também quantas vezes uma palavra foi armazenada. Escreva méto-
dos para essa classe que recuperem o número de vezes que uma palavra foi armazenada ou zero se
ela não tiver sido armazenada.
import java.util.*;
public class ListaDePalavras {
private Set lista;
public ListaDePalavras() {
lista = new TreeSet();
}
public void adiciona(String palavras) {
StringTokenizer st = new StringTokenizer(palavras);
while(st.hasMoreTokens())
lista.add(st.nextToken());
}
public boolean existe(String palavra) {
return lista.contains(palavra);
}
}
3