Verificar opção digitada

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.

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

  string.equals("variável");

No teu caso

if (escolha.equals("+")) {
    (...)
    }
1 curtida

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();
            };

É 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());
        }
    }
}
1 curtida

Muitissimo obrigado