Link do Classroom https://classroom.github.com/a/cPN-sjYB
- Esta atividade é avaliada com esforço estimado entre 4 e 8h.
- Copie os casos de teste para o método
main
em App.java, conforme o exemplo que já está no arquivo. Comente com//
ou/*
e*/
as linhas que ainda não foram implementadas. - Os Casos de Teste podem ser corrigidos se estiverem mal escritos, mas a especificação dos objetos não pode ser alterada.
- Não esqueça de ajustar a visibilidade das classes Dinheiro e Veiculo, elas não devem ser removidas da pasta
modelo
. - E, por fim, assegure-se de assistir as videoaulas antes de começar, pois lá estão explicados todos os conceitos e práticas.
Sobrecarregue o método somar
na classe Dinheiro para aceitar parâmetros int
, double
e String
. No caso de double
, considerar apenas duas casas decimais.
Sobrecarregar o construtor de Dinheiro para aceitar um int
representando Reais (não os centavos), double
(com apenas duas casas decimais) e String
no formato de "R$ 12,34"
com centavos de duas casas e reais de até 7 casas, por exemplo "R$ 1234567,89"
.
Casos de Teste:
Dinheiro d3 = new Dinheiro(3, 45);
System.out.println(d3.getReais() == 3);
System.out.println(d3.getCentavos() == 45);
Dinheiro d4 = new Dinheiro(200);
System.out.println(d4.getReais() == 200);
System.out.println(d4.getCentavos() == 0);
Dinheiro d5 = new Dinheiro("R$ 345,75");
System.out.println(d5.getReais() == 345);
System.out.println(d5.getCentavos() == 75);
Dinheiro d6 = new Dinheiro("R$ 1000000,11");
System.out.println(d6.getReais() == 1000000);
System.out.println(d6.getCentavos() == 11);
Dinheiro d7 = new Dinheiro("R$ 2567,89");
System.out.println(d7.getReais() == 2567);
System.out.println(d7.getCentavos() == 89);
Dinheiro d8 = new Dinheiro(9.75);
System.out.println(d8.getReais() == 9);
System.out.println(d8.getCentavos() == 75);
Dinheiro d9 = new Dinheiro(17.569); // é truncado nas duas casas, não arredondado!
System.out.println(d9.getReais() == 17);
System.out.println(d9.getCentavos() == 56);
d3.somar(d4);
System.out.println(d3.getReais() == 203);
System.out.println(d3.getCentavos() == 45);
d5.somar(100);
System.out.println(d5.getReais() == 445);
System.out.println(d5.getCentavos() == 75);
d6.somar(1.90);
System.out.println(d6.getReais() == 1000002);
System.out.println(d6.getCentavos() == 01);
// d7.somar("R$ 998871,86986"); // PATCH
d7.somar("R$ 998817,86986");
System.out.println(d7.getReais() == 1001385);
System.out.println(d7.getCentavos() == 75);
Dadas instâncias de Dinheiro
devem retornar verdadeiro se possuem o mesmo valor monetário.
Casos de Teste:
Dinheiro d8 = new Dinheiro(8, 98);
Dinheiro d9 = new Dinheiro(8, 99);
Dinheiro d10 = null;
Dinheiro d11 = new Dinheiro(8, 98);
Dinheiro d12 = d8;
System.out.println(d8.equals(d9) == false);
System.out.println(d8.equals(d10) == false);
System.out.println(d8.equals(d11) == true);
System.out.println(d8.equals(d12) == true);
System.out.println(new Dinheiro(3.43).equals(new Dinheiro(3, 43)));
System.out.println(new Dinheiro("R$ 8,97").equals(new Dinheiro(8, 97)));
System.out.println(!new Dinheiro("R$ 5,43").equals(null));
Tornar Dinheiro comparável através da implementação da interface Comparable
.
Casos de Teste:
Dinheiro d12 = new Dinheiro(4, 30);
Dinheiro d13 = new Dinheiro(987, 14);
Dinheiro d14 = new Dinheiro(0, 1);
Dinheiro d15 = new Dinheiro(17, 9);
Dinheiro d16 = new Dinheiro(4, 30);
// Todas estas assertivas devem imprimir true
System.out.println(d12.compareTo(d13) < 0);
System.out.println(d12.compareTo(d14) > 0);
System.out.println(d12.compareTo(d15) < 0);
System.out.println(d12.compareTo(d16) == 0);
Comparable d17 = new Dinheiro(8);
Comparable d18 = new Dinheiro(9);
Comparable d19 = new Dinheiro(8);
System.out.println(d17.compareTo(d18) < 0);
System.out.println(d17.compareTo(d19) == 0);
System.out.println(d18.compareTo(d17) > 0);
Dinheiro[] dindin = {d12, d13, d14, d15, d16};
// Classifique em ordem crescente através de java.util.Arrays
System.out.println(dindin[0].equals(d14));
System.out.println(dindin[1].equals(d12));
System.out.println(dindin[2].equals(d12));
System.out.println(dindin[3].equals(d15));
System.out.println(dindin[4].equals(d13));
Implemente Data
(ex.: 28/01/2021) de forma que possa ser instanciada de pelo menos duas maneiras (sobrecarga de construtor), com validação e totalmente encapsulada (atributos invisíveis) com acesso intermediado por acessores (getters), permitindo a verificação da equivalência (equals) e comparabilidade (compareTo).
Importante: a classe Data
deve ser colocada no diretório modelo e ser declarada como package modelo;
(ver Dinheiro
e Veiculo
).
Escreva os Casos de Teste, conforme aprendeu nas atividades anteriores, que devem cobrir o comportamento normal e os casos especiais.
A classe Veiculo precisa de um método equals. Decida qual será o critério de equivalência e escreva testes para apresentar o comportamento esperado.