Erro calculadora Java

Tava fazendo essa calculadora em Java pra passar o tempo, mas tá dando o seguinte erro:
Exception in thread “main” java.lang.RuntimeException: Uncompilable source code - incompatible types: possible lossy conversion from float to int
at multipla.escolha.MultiplaEscolha.main(MultiplaEscolha.java:40)

Ele diz que vai haver uma conversão com perdas de float pra int, ali na parte do código que tá com dois asteriscos de cada lado (switch(y)). Não entendo o porque desse erro se não tem nada com int. Alguém pode ajudar?

float x, y;
char sinal;
Scanner ler = new Scanner(System.in);

    System.out.println("Insira o primeiro número.");
    x = ler.nextFloat ();
    System.out.print("Insira o sinal da operação.");
    sinal = ler.next().charAt(0);
    System.out.println("Insira o segundo número.");
    y = ler.nextFloat();
    
        switch(sinal)
        {
            case '-':
                System.out.println(x-y);
                break;
            case '+':
                System.out.println(x+y);
                break;
            case '/':
                **switch(y)**
                {
                    case 0:
                        System.out.println("Essa operação é inválida");
                    default:
                        System.out.println(x/y);
                break;
                }
                
            case '*': case 'X': case 'x':
                System.out.println(x*y);
                break;
            default:
                System.out.println("Essa operação não é válida.");
        }

Oi Matheus,

É que o switch, herdado de linguagens mais antigas, e é uma espécie de goto. Existe uma restrição do que pode ser colocado dentro do switch, e é: String, enum ou int (ou menores que int que podem ser convertidos livremente, como byte, short e char).

Quando você coloca um float ali, o compilador reclama porque não tem como converter de float pra int sem colocar o cast, pois como você viu, há perigo de perda de informações. Você pode colocar o cast ali dentro se quiser, que provavelmente vai funcionar, mas se y tiver valor depois da vírgula, vai ser truncado.

1 curtida

No lugar de switch() utilize um if()

case '/':
      **switch(y)**
        {
          case 0:
             System.out.println("Essa operação é inválida");
          default:
             System.out.println(x/y);
          break;
         }

Exemplo de código com if()

case '/':
        if (y == 0) {
             System.out.println("Essa operação é inválida");
        } else {
             System.out.println(x/y);
        }
2 curtidas

Valeu cara <3 Deu certinho