Ir ao conteúdo

Posts recomendados

Postado

Boa noite, estou tentando fazer uma calculadora com tratamento de exceções, porém a partir do segundo while o código está pulando a inserção do primeiro valor, indo direto pro segundo valor 

 

 

 

 

package Calculadora;

import java.util.InputMismatchException;
import java.util.Scanner;

public class calculadora {
    public static void main(String [] args) {
        float valor1=0;
        float valor2=0;
        float opcao=5;
        float resultado;
        //boolean loop = true;
        
        System.out.println("-Seja bem-vindo(a) a sua calculadora-");
        System.out.println("Escolha uma o por favor!!");
        System.out.println("1. Soma");  
        System.out.println("2. Subtracao");  
        System.out.println("3. Multiplicacao");  
        System.out.println("4. Divisao");  
        System.out.println("0. Sair");  
        System.out.println("Operação: "); 
        
        
       
        Scanner teclado = new Scanner(System.in);
          opcao = teclado.nextFloat();
          clearBuffet(teclado);

            
          while(opcao != 0) {
              if (opcao == 1) {
                System.out.print("Digite o primeiro valor: ");
                 clearBuffet(teclado);

                try {
                    valor1 = teclado.nextFloat();
                    clearBuffet(teclado);
                }catch(InputMismatchException e) {
                    System.out.print("Vamos começar de novo, digite apenas números\n\n");
                     clearBuffet(teclado);
                    continue;
                }
              }
             System.out.print("Digite o segundo valor: ");
                try {
                    valor2 = teclado.nextFloat();
                    clearBuffet(teclado);
                    break;
                }catch(InputMismatchException e) {
                    System.out.print("Vamos começar de novo, digite apenas números\n\n");
                    clearBuffet(teclado);
                    continue;
                }
          }    
                
        resultado = valor1 + valor2;
        System.out.println(resultado);
        
         while(opcao != 0) {   
        if (opcao == 2) {
            System.out.print("Digite o primeiro valor: ");
            clearBuffet(teclado);

            try {
                valor1 = teclado.nextFloat();
                clearBuffet(teclado);
            }catch(InputMismatchException e) {
                System.out.print("Vamos começar de novo, digite apenas números\n\n");
                clearBuffet(teclado);
                continue;
            }
        
         System.out.print("Digite o segundo valor: ");
         clearBuffet(teclado);
            try {
                valor2 = teclado.nextFloat();
                clearBuffet(teclado);
                break;
            }catch(InputMismatchException e) {
                System.out.print("Vamos começar de novo, digite apenas números\n\n");
                clearBuffet(teclado);
                continue;
            }
        }
         }
        resultado = valor1 - valor2;
        System.out.print(resultado);
          
         while(opcao != 0) {  
           if (opcao == 3) {
                    System.out.print("Digite o primeiro valor: ");
                     clearBuffet(teclado);
                    try {
                        valor1 = teclado.nextFloat();
                    }catch(InputMismatchException e) {
                        System.out.print("Vamos começar de novo, digite apenas números\n\n");
                        clearBuffet(teclado);
                        continue;
                    }
                  
                 System.out.print("Digite o segundo valor: ");
                 clearBuffet(teclado);

                    try {
                        valor2 = teclado.nextFloat();
                        break;
                    }catch(InputMismatchException e) {
                        System.out.print("Vamos começar de novo, digite apenas números\n\n");
                        clearBuffet(teclado);
                        continue;
                }
              }    
    
         }
              
        resultado = valor1 * valor2;
        System.out.print(resultado);
        
         while(opcao != 0) {
        if (opcao == 4) {
               if (opcao == 1) {
                    System.out.print("Digite o primeiro valor: ");
                     clearBuffet(teclado);

                    try {
                        valor1 = teclado.nextFloat();
                    }catch(InputMismatchException e) {
                        System.out.print("Vamos começar de novo, digite apenas números\n\n");
                        clearBuffet(teclado);
                        continue;
                    }
                  
                 System.out.print("Digite o segundo valor: ");
                 clearBuffet(teclado);

                    try {
                        valor2 = teclado.nextFloat();
                        break;
                    }catch(InputMismatchException e) {
                        System.out.print("Vamos começar de novo, digite apenas números\n\n");
                        clearBuffet(teclado);
                        continue;
                    }
                }
              }    
        else if (valor2 == 0) {
                  System.out.println("Impossivel dividir por 0!!");
                  
        } else resultado = valor1 / valor2;
                       System.out.print(resultado);
          
    if (opcao >= 5){
        System.out.println("Opção invalida");
    
    }
         }         
 } 
          
         
     
    private static void clearBuffet(Scanner scanner) {
        // TODO Auto-generated method stub
         if (scanner.hasNextLine()) {
                scanner.nextLine();
            }
    }
}


 

Postado

Tem vários problemas aí, como o computador vai saber qual das 5 opções a pessoa escolhe se você só colocou elas como um print na tela? Exemplo "System.out.println("1. Soma");" Como o computador vai saber o que cada opção faz se você não determinou que ele lesse que "1" está relacionado a soma, "2" a multiplicação, etc.? Também não entendi pra que usar while em algo que não é um loop? Por mim eu usaria if e depois ifs dentro deste. Quando você diz "while (opcao !0") isso pode incluir números 6 pra cima ou até números negativos que o usuário digitar, coisa que nem deveria existir no programa, o certo seria dizer "opcao > 0 && <=5" ou "opcao > 0 && <6". A opção teria que ser um 'int' no caso, você declarou como float e deu um valor inicial a ela de "5"??

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!