Provinha-1
Lista de Exercícios para Nota da Prova 1
OBS: Códigos mal formatados e sem seguir o padrão de estilo de código Java da Google serão penalizados. Esse padrão foi escolhido por ter ferramentas de checagem automáticas para linha de comando, Intellij e Eclipse.
A style guide is a set of conventions (sometimes arbitrary) about how to write code. It is much easier to understand a large codebase when all the code in it is in a consistent style.
Recomendação: Escreva testes para o seu programa ANTES de implementa-lo. Inicialmente, todos esses testes vão dar errado, já que você ainda não implementou as funcionalidades. A medida que você implementa cada funcionalidade, o teste dela passa. Se preferir, pode usar algum framework, como JUnit (exemplo) usado no exemplo do exercício 5.
Exercicio 0: Agenda
- Nome.
- Idade.
- Número.
- Mostrar os dados do contato.
- Adicionar Contato.
- Remover Contato.
- Buscar contato pelo nome.
- Imprimir todos os contatos.
- Imprimir um contato específico (por nome).
Exercício 1: Dados
Implemente um jogo de dados onde dois jogadores competem para tirar o maior valor da soma de dois dados. Ou seja, caso o JOGADOR 1 role os dados e esses somem mais que os valores dos dados rolados pelo JOGADOR 2, o JOGADOR 1 vence. Para isso, crie uma classe para representar o dado, lembrando que o número de faces do dado podem variar, além disso, os dados devem ser capazes de rolar (use Random para auxiliar). Crie também uma classe para representar os jogadores. Cada um deles deve ter um nome e um dado associado a ele. Crie também uma classe para gerenciar o jogo. Lembre que uma partida pode ter várias rodadas, ou seja, cada um pode lançar os dados o número de vezes pre-estabelecido (na classe gerente). No fim, mostre o nome de quem venceu o jogo.
Escreva um aplicativo teste que demonstre todas as capacidades do jogo.
Exercício 2: Fatorial
Exercício 3: Cartas
- Embaralhar.
- Mostrar cartas.
- Mostrar carta específica.
- Buscar uma carta.
Exercício 4: Supermercado
Exercício 5: Árvore genealógica
import org.junit.Before;
import org.junit.Test;
import java.util.Set;
import static org.junit.Assert.assertEquals;
public class GTreeTest {
private GTree tree;
/** * Initialization */
@Before
public void setUp() {
Person john= new Person("John", null, null);
Person ann= new Person("Ann", null, null);
Person paul= new Person("Paul", john, ann);
Person steve= new Person("Steve", paul, null);
tree = new GTree();
tree.add(john);
tree.add(ann);
tree.add(paul);
tree.add(steve);
}
/** * Test case for fatherOf */
@Test
public void testFatherOf() {
assertEquals("John", tree.fatherOf("Paul"));
}
/** * Test case for ancestorsOf */
@Test
public void testAncestorsOf() {
Set<String> ancestors = Set.of("John", "Ann", "Paul");
assertEquals(ancestors, tree.ancestorsOf("Steve"));
}
}
Exercício 6: Pagamento de Conta
- Implemente pelo menos dois construtores diferentes (sobrecarga de construtores).
- Implemente os métodos get e set que forem necessários.
- Implemente um método denominado “efetuarPagamento”, o qual recebe como parâmetro (argumento) de entrada uma data, atribui esta data ao atributo dataPagamento e, em seguida, altera o status da conta para “P” (ou seja, pago).
- Implemente um método denominado “marcarVencida” o qual altera o status da conta para “V” (ou seja, vencida).
Escreva um aplicativo de teste que demonstre todas as funcionalidades
Exercício 7: Invoice
- O número do item faturado.
- A descrição do item.
- A quantidade comprada do item.
- O preço unitário do item.
Exercício 8: Data
- Represente uma data usando três atributos: o dia, o mês, e o ano.
- Sua classe deve ter um construtor que inicializa os três atributos e verifica a validade dos valores fornecidos.
- Forneça um construtor sem parâmetros que inicializa a data com a data atual, fornecida pelo sistema operacional.
- Forneça um método set um get para cada atributo.
- Forneça o método toString para retornar uma representação da Data como string. Considere que a data deve ser formatada mostrando o dia, o mês e o ano separados por barra (/).
- Forneça uma operação para avançar uma data para o dia seguinte.
- Garanta que uma instância desta classe sempre esteja num estado consistente.
Exercício 9: Jogo da Velha
- A classe deve conter, como dados privados, um array bidimensional 3x3 para representar a grade do jogo.
- Crie uma enumeração para representar as possibilidades de ocupação de uma casa na grade (vazia, jogador 1 ou jogador 2).
- O construtor deve inicializar a grade como vazia.
- Forneça um método para exibir a grade.
- Permita dois jogadores humanos.
- Forneça um método para jogar o jogo; todo movimento deve ocorrer em uma casa vazia; depois de cada movimento, determine se houve uma derrota ou um empate.