Pular para o conteúdo
Bruno Dórea
Todos os posts

6 mins de leitura


Implementando uma Calculadora Simples com Padrão Strategy

Desafios de Código Java Intermediários - Design Patterns - 2/5


Java AI Powered
Java AI Powered

Descrição

Você foi designado para criar uma calculadora simples em Java, aplicando o padrão de projeto Strategy para representar as operações matemáticas.

Entrada

O programa deve solicitar ao usuário dois números e a operação desejada. As operações podem ser especificadas pelos seguintes sinais: + para soma, - para subtração, * para multiplicação e / para divisão. O usuário deve inserir o sinal correspondente à operação desejada.

Saída

A calculadora deve utilizar o padrão Strategy para realizar a operação escolhida e exibir o resultado.

Exemplos

A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.

EntradaSaída
100
1010.0
/
EntradaSaída
9
436.0
*
EntradaSaída
4
37.0
+

Resolução

import java.util.Scanner;
 
interface Operation {
    double execute(double num1, double num2);
}
 
class AddOperation implements Operation {
    @Override
    public double execute(double num1, double num2) {
        return num1 + num2;
    }
}
 
class SubtractOperation implements Operation {
    @Override
    public double execute(double num1, double num2) {
        return num1 - num2;
    }
}
 
class MultiplyOperation implements Operation {
    @Override
    public double execute(double num1, double num2) {
        return num1 * num2;
    }
}
 
class DivideOperation implements Operation {
    @Override
    public double execute(double num1, double num2) {
        if (num2 == 0) {
            System.out.println("Erro: Divisão por zero.");
            return Double.NaN;
        }
        return num1 / num2;
    }
}
 
class Calculator {
    private Operation operation;
 
    public void setOperation(Operation operation) {
        this.operation = operation;
    }
 
    public double performOperation(double num1, double num2) {
        return operation.execute(num1, num2);
    }
}
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        Operation addOperation = new AddOperation();
        Operation subtractOperation = new SubtractOperation();
        Operation multiplyOperation = new MultiplyOperation();
        Operation divideOperation = new DivideOperation();
 
        Calculator calculator = new Calculator();
 
        double num1 = scanner.nextDouble();
        double num2 = scanner.nextDouble();
 
        String operationChoice = scanner.next();
 
        switch (operationChoice) {
            case "+":
                calculator.setOperation(addOperation);
                break;
            case "-":
                calculator.setOperation(subtractOperation);
                break;
            case "*":
                calculator.setOperation(multiplyOperation);
                break;
            case "/":
                calculator.setOperation(divideOperation);
                break;
            default:
                System.out.println("Operação inválida.");
                return;
        }
 
        double result = calculator.performOperation(num1, num2);
        System.out.println(result);
    }
}

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.