Pular para o conteúdo

Exercício 03: Funções

Reescreva o código abaixo removendo o uso desnecessário de switch/case:

public class Pedido {
private double valorTotal;
private String tipoCliente; // Pode ser "COMUM", "VIP" ou "FUNCIONARIO"
public Pedido(double valorTotal, String tipoCliente) {
this.valorTotal = valorTotal;
this.tipoCliente = tipoCliente;
}
// Método com uso desnecessário de switch
public double calcularDesconto() {
double desconto = 0.0;
switch (tipoCliente) {
case "COMUM":
desconto = 0.05; // 5% de desconto
break;
case "VIP":
desconto = 0.10; // 10% de desconto
break;
case "FUNCIONARIO":
desconto = 0.20; // 20% de desconto
break;
default:
desconto = 0.0; // Sem desconto
break;
}
return valorTotal * (1 - desconto);
}
// Método para exibir o resumo do pedido
public void exibirResumo() {
System.out.println("Tipo de Cliente: " + tipoCliente);
System.out.println("Valor Original: R$" + valorTotal);
System.out.println("Valor com Desconto: R$" + calcularDesconto());
}
public static void main(String[] args) {
Pedido pedido1 = new Pedido(100.0, "VIP");
pedido1.exibirResumo();
}
}

Reescreva o código abaixo removendo as assinaturas de métodos com um número excessivo de parâmetros:

public class GerenciadorPartida {
public void registrarPartida(String timeCasa, String timeVisitante, int golsCasa, int golsVisitante,
int posseBolaCasa, int posseBolaVisitante, int chutesCasa, int chutesVisitante,
int faltasCasa, int faltasVisitante, int cartoesAmarelosCasa, int cartoesAmarelosVisitante,
int cartoesVermelhosCasa, int cartoesVermelhosVisitante) {
System.out.println("Partida Registrada:");
System.out.println(timeCasa + " " + golsCasa + " x " + golsVisitante + " " + timeVisitante);
System.out.println("Posse de Bola: " + posseBolaCasa + "% - " + posseBolaVisitante + "%");
System.out.println("Chutes: " + chutesCasa + " - " + chutesVisitante);
System.out.println("Faltas: " + faltasCasa + " - " + faltasVisitante);
System.out.println("Cartões Amarelos: " + cartoesAmarelosCasa + " - " + cartoesAmarelosVisitante);
System.out.println("Cartões Vermelhos: " + cartoesVermelhosCasa + " - " + cartoesVermelhosVisitante);
}
public void gerarRelatorio(String timeCasa, String timeVisitante, int golsCasa, int golsVisitante,
int posseBolaCasa, int posseBolaVisitante, int chutesCasa, int chutesVisitante,
int faltasCasa, int faltasVisitante, int cartoesAmarelosCasa, int cartoesAmarelosVisitante,
int cartoesVermelhosCasa, int cartoesVermelhosVisitante) {
String vencedor = golsCasa > golsVisitante ? timeCasa : (golsCasa < golsVisitante ? timeVisitante : "Empate");
System.out.println("=== Relatório da Partida ===");
System.out.println("Vencedor: " + vencedor);
System.out.println("Posse de Bola: " + posseBolaCasa + "% - " + posseBolaVisitante + "%");
System.out.println("Total de Chutes: " + (chutesCasa + chutesVisitante));
System.out.println("Total de Faltas: " + (faltasCasa + faltasVisitante));
System.out.println("Total de Cartões: " + ((cartoesAmarelosCasa + cartoesAmarelosVisitante) +
(cartoesVermelhosCasa + cartoesVermelhosVisitante)));
}
public static void main(String[] args) {
GerenciadorPartida gerenciador = new GerenciadorPartida();
gerenciador.registrarPartida("Time A", "Time B", 2, 1, 55, 45, 10, 8, 15, 12, 3, 2, 1, 0);
gerenciador.gerarRelatorio("Time A", "Time B", 2, 1, 55, 45, 10, 8, 15, 12, 3, 2, 1, 0);
}
}

Reescreva o código abaixo sem utilizar parâmetros booleanos nas funções:

public class FilmeService {
public void listarFilmes(boolean apenasDisponiveis) {
if (apenasDisponiveis) {
System.out.println("Listando apenas filmes disponíveis para locação...");
} else {
System.out.println("Listando todos os filmes do catálogo...");
}
}
public void atualizarStatusFilme(String titulo, boolean disponivel) {
if (disponivel) {
System.out.println("O filme \"" + titulo + "\" agora está disponível para locação.");
} else {
System.out.println("O filme \"" + titulo + "\" foi marcado como indisponível.");
}
}
public static void main(String[] args) {
FilmeService service = new FilmeService();
service.listarFilmes(true);
service.listarFilmes(false);
service.atualizarStatusFilme("Inception", true);
service.atualizarStatusFilme("Matrix", false);
}
}

Reescreva o código abaixo resolvendo um problema de imulatibilidade que causa um problema com o preço final do produto quando usado mais de uma vez:

class Produto {
String nome;
double preco;
Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
void aplicarDesconto(double desconto) {
this.preco -= desconto;
}
}
class CarrinhoDeCompras {
Produto produto;
CarrinhoDeCompras(Produto produto) {
this.produto = produto;
}
void adicionarProdutoAoCarrinho(Produto novoProduto) {
this.produto = novoProduto;
}
void finalizarCompra() {
produto.aplicarDesconto(10.0);
}
void mostrarDetalhes() {
System.out.println("Produto: " + produto.nome);
System.out.println("Preço: " + produto.preco);
}
}
public class Main {
public static void main(String[] args) {
Produto produto1 = new Produto("Laptop", 1500.00);
CarrinhoDeCompras carrinho = new CarrinhoDeCompras(produto1);
Produto produto2 = new Produto("Smartphone", 1200.00);
carrinho.adicionarProdutoAoCarrinho(produto2);
carrinho.finalizarCompra();
carrinho.mostrarDetalhes();
}
}

Reescreva o código abaixo de forma a métodos com funcionamento muito parecido.

public class Jogo {
private int vidaJogador;
private int vidaInimigo;
public Jogo(int vidaJogador, int vidaInimigo) {
this.vidaJogador = vidaJogador;
this.vidaInimigo = vidaInimigo;
}
public void atacarJogador(int dano) {
vidaJogador -= dano;
if (vidaJogador <= 0) {
System.out.println("Jogador perdeu!");
} else {
System.out.println("Vida do Jogador: " + vidaJogador);
}
}
public void atacarInimigo(int dano) {
vidaInimigo -= dano;
if (vidaInimigo <= 0) {
System.out.println("Inimigo perdeu!");
} else {
System.out.println("Vida do Inimigo: " + vidaInimigo);
}
}
public int getVidaJogador() {
return vidaJogador;
}
public int getVidaInimigo() {
return vidaInimigo;
}
}