Problema con bucle while junto con condiciones if

Iniciado por Runforyourlife, 2 Diciembre 2016, 22:21 PM

0 Miembros y 1 Visitante están viendo este tema.

Runforyourlife

Tengo un problema que yo creo que cualquier programador intermedio lo puede solucionar. El caso es que tengo un bucle while en el que si pongo en el input (por ejemplo) "suma" y añado los números se realiza la resta pero después vuelve a ejecutarse el while y sale como si hubiera puesto después nada en el input y me sale el error (y después, obviamente, se vuelve a ejecutar).



    import java.util.Scanner;
   
    public class MainClass {
    public static void main(String[] args){
   
    Scanner scan = new Scanner(System.in);
   
    System.out.println("\tCalculadora");
    System.out.println("--------------------------");
   
   
    int condicion = 1;
    while(condicion == 1){
   
    System.out.println("¿Qué operación desea realizar?");
    System.out.println("Suma");
    System.out.println("Resta");
    System.out.println("Salir");
   
    String operacion = scan.nextLine();
   
    if(operacion.toLowerCase().equals("suma")){
    System.out.println("Introduce los números que quieres sumar");
   
    System.out.println("Número 1: ");
    double numero1 = scan.nextDouble();
   
    System.out.println("Número 2: ");
    double numero2 = scan.nextDouble();
   
    Suma suma = new Suma(numero1, numero2);
   
    System.out.println("Resultado: " + suma.getSuma());
   
    }else if(operacion.toLowerCase().equals("resta")){
    System.out.println("Introduce los números que quieres restar");
   
    System.out.println("Número 1: ");
    double numero1 = scan.nextDouble();
   
    System.out.println("Número 2: ");
    double numero2 = scan.nextDouble();
   
   
    Resta resta = new Resta(numero1, numero2);
   
    System.out.println("Resultado: " + resta.getResta());
   
    }else if(operacion.toLowerCase().equals("salir")){
    System.out.println("¡Adiós! ;)");
    condicion = 0;
   
   
    }else{
    System.out.println("Error: Puede ser que hayas escrito mal la palabra. Vuelve a intentarlo");
    }
    }
    }
    }



Por consola:
           Calculadora
    --------------------------
    ¿Qué operación desea realizar?
    Suma
    Resta
    Salir
    SUMA (input)
    Introduce los números que quieres sumar
    Número 1:
    1 (input)
    Número 2:
    1 (input)
    Resultado: 2.0
    ¿Qué operación desea realizar?
    Suma
    Resta
    Salir
    Error: Puede ser que hayas escrito mal la palabra. Vuelve a intentarlo
    ¿Qué operación desea realizar?
    Suma
    Resta
    Salir

Si necesitáis las otras dos clases os las envio, pero creo que no hace falta, por eso no las añado.


¡Saludos! ;)



0xFer

#1
Después de pedir un número se guarda un salto de linea en el buffer y antes de pedir una nueva linea hay que limpiarlo:

Código (java) [Seleccionar]
scan.nextLine();
String operacion = scan.nextLine();


Pero en ese caso hay que ver si antes se ha ingresado un número, o mejor limpiarlo después de ingresar el número:

Código (cpp) [Seleccionar]
double numero2 = scan.nextDouble();
scan.nextLine();


pero no es necesario porque solo quieres leer una palabra y basta con:

Código (cpp) [Seleccionar]
String operacion = scan.next();

Saludos  ;D
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

Runforyourlife