Lista 02#
Instruções#
Neste ponto da disciplina, ainda não vimos operações de entrada e saída. Por isso, para simular a entrada dos programas, você deverá, simplesmente, declarar variáveis e inicializá-las com os valores que seriam lidos na entrada.
Não use Scanner; todos os valores devem ser declarados diretamente no código.
Exercícios#
(Questão 01) Crie um programa que demonstre o comportamento de overflow e underflow nos tipos byte, short e int. Em seguida, para cada tipo:
1.1. Exiba o valor máximo e mínimo usando constantes das Wrapper Classes correspondentes (Use obrigatoriamente Byte.MAX_VALUE, Short.MAX_VALUE, Integer.MAX_VALUE, etc).
1.2. Some 1 ao valor máximo de cada tipo e exiba o resultado, explicando em comentários o que acontece.
1.3. Converta explicitamente um long com valor 300 para byte e exiba o resultado, justificando o valor obtido.
(Questão 02) Crie a classe MinhaString que recebe no construtor um parâmetro String valor, que é um valor de um dos tipos: int, double, long e boolean.
A classe deve efetuar a conversão do valor recebido para qualquer um dos outros tipos, desde que seja possível, através dos métodos a seguir. Quando não for possível converter, retorne null:
toInteger(): retorna oIntegercorrespondentetoDouble(): retorna oDoublecorrespondentetoLong(): retorna oLongcorrespondentetoBoolean(): retorna oBooleancorrespondente
Use os métodos Integer.parseInt(), Double.parseDouble(), etc, das respectivas wrapper classes.
Exemplo
MinhaString minhaStr = new MinhaString("123");
System.out.println(minhaStr.toInteger()); // Ok. Exibe 123
System.out.println(minhaStr.toDouble()); // Ok. Exibe 123.0
System.out.println(minhaStr.toLong()); // Ok. Exibe 123
System.out.println(minhaStr.toBoolean()); // null
MinhaString minhaStr = new MinhaString('123');
System.out.println(minhaStr.toInteger()); // Ok. Exibe 123
System.out.println(minhaStr.toDouble()); // Ok. Exibe 123.0
System.out.println(minhaStr.toLong()); // Ok. Exibe 123
System.out.println(minhaStr.toBoolean()); // null(Questão 03) Implemente a classe Temperatura com as seguintes características:
- Atributo
double valoreString escala(aceitar apenas “C”, “F” ou “K”). - Construtor que valide a escala; imprima “Escala inválida” se inválida.
Métodos de conversão:
toCelsius(): retorna nova instância deTemperaturaem CelsiustoFahrenheit(): retorna nova instância em FahrenheittoKelvin(): retorna nova instância em KelvinimprimeComEscala(): imprime a temperatura na escala em que foi instanciadaValide que a temperatura em Kelvin nunca seja negativa; imprima uma mensagem de erro se isso ocorrer.
No
main, converta uma mesma temperatura pelas três escalas e exiba os resultados.
(Questão 04) Crie uma classe Estudante com atributos para nome, matrícula e um array de notas. Crie métodos para calcular a média das notas e determinar se o aluno foi aprovado ou reprovado, considerando que a média para ser aprovado é 70. Crie objetos Estudante e imprima informações dos objetos.
- A classe
Estudantedeve possuir:- Construtor
Estudante(nome, matricula, n1, n2, ...)onde, apósnomeematrícula, pode ser passada uma quantidade variável de notas (usando varags). - Método
getMedia()que retorna o cálculo (double) da média das notas do estudante. - Método
setNotas(n1, n2, ...)(varargs) para definir as todas notas de uma vez (cada nota é umdouble). - Método
getNota(indice), para obter uma determinada nota, ondeindiceé um índice do array de notas iniciando de0. Retorne-1caso o índice seja inexistente. - Método
getSituacao()que retorna a situação do estudante, sendo o retorno uma das strings: “Aprovado”, “Reprovado"e “Final”.
- Construtor
(Questão 05) Crie uma classe ContaCorrente com:
Atributos:
String titulardouble saldoint numeroConta
Métodos:
void depositar(double valor) — soma o valor ao saldo somente se o valor for positivo; caso contrário, exibe mensagem de erro
void sacar(double valor) — subtrai do saldo somente se o valor for positivo e houver saldo suficiente; caso contrário, exibe mensagem de erro
void transferir(ContaCorrente destino, double valor) — usa sacar e depositar internamente
double getSaldo() — exibe titular, número da conta e saldo atual
No main, crie duas contas, realize depósitos, saques e uma transferência entre elas. Tente também realizar um saque maior que o saldo.
(Questão 06) Crie uma classe Circulo com:
Atributo:
double raio
Métodos:
double calcularArea()— useMath.PI * raio * raiodouble calcularCircunferencia()— use2 * Math.PI * raioboolean contemOutro(Circulo outro)— retornatruese este círculo tem raio maior que o outroCirculo maior(Circulo outro)— retorna o próprio objeto (this) se este for maior, ou outro caso contráriovoid exibirDados()— exibe raio, área e circunferência formatados com duas casas decimais usandoString.format().
No main:
- Crie um círculo com raio 5.0 e exiba seus dados.
- Dobre o raio (atribua
raio * 2) e exiba novamente. - Crie um segundo círculo com raio 3.0. Use
contemOutro()para exibir qual deles contém o outro.
(Questão 07) Crie uma classe Relogio que representa um horário no formato HH:MM:SS.
Atributos: int horas, int minutos, int segundos
Métodos:
void tick()— avança 1 segundo; quando segundos chegarem a 60, reinicia para 0 e incrementa minutos; quando minutos chegarem a 60, reinicia e incrementa horas; quando horas chegarem a 24, tudo reinicia para 0void adicionarSegundos(int n)— chamatick()n vezesString exibirHorario()— retorna no formato “09:05:03” (sempre dois dígitos, useString.format)boolean isMaiorQue(Relogio outro)— compara os dois horários e retorna true se este for posterior ao outro
No main, crie um relógio com 23:59:57, chame adicionarSegundos(5) e exiba o horário a cada segundo adicionado.