1
resposta

Desafio: hora da prática

Crie uma classe ConversorMoeda que implementa uma interface ConversaoFinanceira com o método converterDolarParaReal() para converter um valor em dólar para reais. A classe deve receber o valor em dólar como parâmetro.

ConversaoFinaceira

public interface ConversaoFinaceira {
    void converterDolarParaReal(double valorEmDolar);
}

ConversorMoeda

public class ConversorMoeda implements ConversaoFinaceira {

    @Override
    public void converterDolarParaReal(double valorEmDolar) {
        double valorDoDolar = 5.03;
        double valorReal = valorDoDolar * valorEmDolar;

        System.out.printf("O valor de $%.2f convertido para reais: R$%.2f%n", valorEmDolar, valorReal);
    }
}

Main

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner leitor = new Scanner(System.in);

        System.out.println("( Converter Dólar -> Real )");
        System.out.print("Informe o valor em Dólar: ");
        double valorEmDolar = leitor.nextDouble();

        ConversorMoeda conversorMoeda = new ConversorMoeda();

        conversorMoeda.converterDolarParaReal(valorEmDolar);

        leitor.close();
    }
}


Crie uma classe CalculadoraSalaRetangular que implementa uma interface CalculoGeometrico com os métodos calcularArea() e calcularPerimetro() para calcular a área e o perímetro de uma sala retangular. A classe deve receber altura e largura como parâmetros.

Main

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner leitor = new Scanner(System.in);

        System.out.println("( Calculadora )");
        System.out.println("Calcular a área e o perímetro de uma sala retângular");
        System.out.print("Informe o valor da largura: ");
        double larguraValor = leitor.nextDouble();

        System.out.print("Informe o valor da altura: ");
        double alturaValor = leitor.nextDouble();

        CalculadoraSalaRetangular calculadoraSalaRetangular = new CalculadoraSalaRetangular();

        calculadoraSalaRetangular.calcularArea(alturaValor, larguraValor);
        calculadoraSalaRetangular.calcularPerimetro(alturaValor, larguraValor);
    }
}

CalculadoraSalaRetangular

public class CalculadoraSalaRetangular implements CalculoGeometrico{

    @Override
    public void calcularArea(double altura, double largura) {
        double valorArea = altura * largura;
        System.out.printf("O valor da área retângular para os valores informados é: %.2f%n", valorArea);
    }

    @Override
    public void calcularPerimetro(double altura, double largura) {
        double valorPerimetro = 2 * (altura + largura);
        System.out.printf("O valor do perímetro para os valores informados é: %.2f%n", valorPerimetro);
    }
}

CalculoGeometrico

public interface CalculoGeometrico {
    void calcularArea(double altura, double largura);
    void calcularPerimetro(double altura, double largura);
}

Crie uma classe TabuadaMultiplicacao que implementa uma interface Tabuada com o método mostrarTabuada() para exibir a tabuada de um número. A classe deve receber o número como parâmetro.

Main

public class Main {
    public static void main(String[] args) {
        TabuadaMultiplicacao tabuadaMultiplicacao = new TabuadaMultiplicacao();

        tabuadaMultiplicacao.mostrarTabuada(10);
    }
}

Tabuada

public interface Tabuada {
    void mostrarTabuada(int numero);
}

TabuadaMultiplicacao

public class TabuadaMultiplicacao implements Tabuada{

    @Override
    public void mostrarTabuada(int numero) {
        System.out.println("( Tabuada )");
        for (int i = 1; i <= numero; i++) {
            int resultado = numero * i;

            System.out.printf("%d * %d = %d%n", numero, i, resultado);
        }
    }
}
1 resposta

Olá, Tiago. Como vai?

O seu código está excelente! Você conseguiu resolver todos os desafios propostos aplicando com maestria os conceitos essenciais da Orientação a Objetos em Java, como a criação e implementação de interfaces com o uso correto da anotação @Override.

A separação das responsabilidades entre as interfaces, classes de implementação e as classes Main ficou muito bem estruturada.

Analisando o seu código de forma técnica, trago duas observações importantes para agregar ainda mais valor ao seu aprendizado e ajudá-lo a refinar pequenos detalhes lógicos:

  • Pequeno detalhe na Tabuada: No método mostrarTabuada(int numero), você configurou o laço for para rodar até o valor de numero (i <= numero). Se o parâmetro enviado for o número 10, ela exibirá de 1 a 10 perfeitamente. Contudo, se você passar o número 5, ela exibirá a tabuada apenas até o 5. A boa prática para uma tabuada padrão é fixar o limite do laço até 10 (i <= 10), garantindo que qualquer número informado exiba a sequência completa de 1 a 10.
  • Fechamento do Scanner: No primeiro desafio, você fez muito bem em fechar o leitor com leitor.close(). No segundo desafio, acabou esquecendo de fechar. Uma excelente alternativa moderna no Java para não precisar se preocupar com isso é o try-with-resources, que fecha o Scanner automaticamente.

Veja como aplicar essas boas práticas na classe TabuadaMultiplicacao e na estrutura da Main:

// Ajuste na lógica da Tabuada para fixar até o 10
public class TabuadaMultiplicacao implements Tabuada {
    @Override
    public void mostrarTabuada(int numero) {
        System.out.println("( Tabuada do " + numero + " )");
        for (int i = 1; i <= 10; i++) { // Agora vai sempre até o 10
            int resultado = numero * i;
            System.out.printf("%d * %d = %d%n", numero, i, resultado);
        }
    }
}

E para a captura de dados de forma segura na Main do cálculo geométrico:

// Exemplo de uso do try-with-resources
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // O Scanner aberto aqui dentro será fechado automaticamente no fim do bloco
        try (Scanner leitor = new Scanner(System.in)) {
            System.out.println("( Calculadora Retangular )");
            System.out.print("Informe o valor da largura: ");
            double larguraValor = leitor.nextDouble();

            System.out.print("Informe o valor da altura: ");
            double alturaValor = leitor.nextDouble();

            CalculadoraSalaRetangular calculadora = new CalculadoraSalaRetangular();
            calculadora.calcularArea(alturaValor, larguraValor);
            calculadora.calcularPerimetro(alturaValor, larguraValor);
        } 
    }
}

Dica de formatação: O uso do System.out.printf com o caractere %n para quebra de linha nativa do sistema operacional ficou ótimo e demonstra que você está atento às boas práticas globais do ecossistema Java.

Parabéns pelo excelente desempenho na resolução de toda a lista de exercícios!

Espero que possa ter lhe ajudado!