Verificar opção digitada

4 respostas Resolvido
S

Pessoal, boa tarde… Estou tentando fazer uma verificacao para um exercicio da facul, onde eu tenho que montar uma calculadora em um loop que ira sair quando escolher a opcao 0, ate ai tudo bem, consegui fazer, meu dilema agora eh testar se a operacao é valida antes de prosseguir com o pedido de numeros para fazer a operacao… pois da forma como esta agora, por conta do switch, ele pergunta qual opcao eu quero, dai pede os numeros e dai ele diz se foi invalido ou nao… pensei no if, mas nao estou conseguindo pensar em um opcao para compara strings ja que as operacoes serao + - / e *.

Este é o codigo que eu tenho ate o momento

public class CalculadoraAtv1 {

    /**
     * @param args the command line arguments
     */
    public static double somar(double valorA, double valorB) {
        return valorA + valorB;
    }

    public static double subtrair(double valorA, double valorB) {
        return valorA - valorB;
    }

    public static double multiplicar(double valorA, double valorB) {
        return valorA * valorB;
    }

    public static double dividir(double valorA, double valorB) {
        return valorA / valorB;
    }

    public static void main(String[] args) {

        int terminar = 1;
        String escolha;

        Scanner valor = new Scanner(System.in);

        while (terminar != 0) {
        
            System.out.println("Escolha uma operação"
                    + "\n(+) - Somar"
                    + "\n(-) - Subtrair"
                    + "\n(/) - Dividir"
                    + "\n(*) - Multiplicar"
            );
            escolha = valor.next();
            
            double resultado;
            System.out.println("Escolha o primeiro numero");
            double valorA = valor.nextDouble();
            System.out.println("Escolha o segundo numero");
            double valorB = valor.nextDouble();

            switch (escolha) {
                case "+":
                    resultado = somar(valorA, valorB);
                    System.out.println("O valor da soma é: " + resultado);
                    break;

                case "-":
                    resultado = subtrair(valorA, valorB);
                    System.out.println("O valor da subtração é: " + resultado);
                    break;

                case "*":
                    resultado = multiplicar(valorA, valorB);
                    System.out.println("O valor da multiplicação é: " + resultado);
                    break;

                case "/":
                    resultado = dividir(valorA, valorB);
                    System.out.println("O valor da divisão é: " + resultado);
                    break;

                default:
                    System.out.println("Voce digitou uma opcao invalida!!!");

            }
            System.out.println("Quer efetuar outra operação? [0] - Não / [1] - Sim");
            terminar = valor.nextInt();
        }

    }

}

Se puderem me dar um norte ficarei muito grato.

4 Respostas

Fefo80

String você compara fácil, é só usar:

string.equals("variável");

No teu caso

if (escolha.equals("+")) {
    (...)
    }
S

Valeu;… vou testar aqui… esse equal ele testa se é igual? teria algum !equals? Nao consegui encontrar procurando na net.
Porque a logica que estou querendo usar eh a seguinte… dentro do while infinito que eu fiz… se a pessoa nao digitar as opcoes validas, ele avisa que esta errado e nao continua. Esta ignorando o if…
Fiz um bloco assim para comecar a testar.

if (escolha.equals("+") || escolha.equals("-") 
                    || escolha.equals("/") || escolha.equals("*")) {
                System.out.println("executou o codigo");
            }else{
                System.out.println("Opção Invalida");
                System.out.println("\nQuer efetuar outra operação? [0] - Não / [1] - Sim");
                terminar = valor.nextInt();
            };
staroski
Solucao aceita

É só pôr o ! na frente da expressão.

if ( !meuObjetoString.equals(outroObjetoString) ) {
    // são diferentes
}

Mas o seu problema não estava no uso do switch e sim no uso inadequado da classe Scanner.
O Scanner pode ser muito bom para ler arquivos e streams de dados, mas quando você for ler do TECLADO, deve usar somente o método nextLine(), para consumir adequadamente a quebra de linha que é gerada ao pressionar o ENTER.

Os métodos next, nextDouble e nextInt NÃO consomem a quebra de linha e isso gera comportamentos indesejados, como você pode constatar.

Veja o seu código refatorado, utilizando somente o nextLine:

import java.io.PrintStream;
import java.util.Scanner;

public class CalculadoraAtv1 {

    /**
     * @param args the command line arguments
     */
    public static double somar(double valorA, double valorB) {
        return valorA + valorB;
    }

    public static double subtrair(double valorA, double valorB) {
        return valorA - valorB;
    }

    public static double multiplicar(double valorA, double valorB) {
        return valorA * valorB;
    }

    public static double dividir(double valorA, double valorB) {
        return valorA / valorB;
    }

    private static final Scanner IN = new Scanner(System.in);
    private static final PrintStream OUT = System.out;

    public static void main(String[] args) {

        int terminar = 1;
        String escolha;

        while (terminar != 0) {

            OUT.println("Escolha uma operação" + "\n(+) - Somar" + "\n(-) - Subtrair" + "\n(/) - Dividir" + "\n(*) - Multiplicar");
            escolha = IN.nextLine();

            double resultado;
            OUT.println("Escolha o primeiro numero");
            double valorA = Double.parseDouble(IN.nextLine());
            OUT.println("Escolha o segundo numero");
            double valorB = Double.parseDouble(IN.nextLine());

            switch (escolha) {
                case "+":
                    resultado = somar(valorA, valorB);
                    OUT.println("O valor da soma é: " + resultado);
                    break;

                case "-":
                    resultado = subtrair(valorA, valorB);
                    OUT.println("O valor da subtração é: " + resultado);
                    break;

                case "*":
                    resultado = multiplicar(valorA, valorB);
                    OUT.println("O valor da multiplicação é: " + resultado);
                    break;

                case "/":
                    resultado = dividir(valorA, valorB);
                    OUT.println("O valor da divisão é: " + resultado);
                    break;

                default:
                    OUT.println("Voce digitou uma opcao invalida!!!");
                    break;

            }
            OUT.println("Quer efetuar outra operação? [0] - Não / [1] - Sim");
            terminar = Integer.parseInt(IN.nextLine());
        }
    }
}
S

Muitissimo obrigado

Criado 20 de outubro de 2020
Ultima resposta 21 de out. de 2020
Respostas 4
Participantes 3