Tengo un problema que mi maestro quiere en la expectativa del código y trato de atraparlo. Proteger antes de una entrada incorrecta y necesito poner esto en mi código Tengo algo pero no funciona correctamente si pongo alguna letra como a, b, c, el programa se cae.

package projectprucha;

import java.util.Scanner;
import java.io.*;
import java.util.InputMismatchException;

public class Projectprucha {

public static Scanner scan = new Scanner(System.in);

public static void main(String[] args) {

    int Choose;

    do {

        writeMenu();
        Choose = scan.nextInt();
        scan.nextLine();

        try {
            switch (Choose) {

                case 1:

                    Joke vtip = new Joke();
                    vtip.Napis();
                    JokeII vtipII = new JokeII();
                    vtipII.NapisII();
                    break;

                case 2:

                    Kalkulacka.staticMethod();
                    break;

                case 3:

                    Moudro rada = new Moudro();
                    rada.Rekni();

                case 0:
                    System.out.println("You have exited the system");
                    System.exit(0);
                default:
                    throw new InputMismatchException();
            }
        } catch (InputMismatchException e) {
            System.out.println("Error in the data you have entered please try again");

        }
    } while (Choose != 0);

}

  private static void writeMenu() {
    System.out.println("Menu");
    System.out.println("1: Něco pro zasmání");
    System.out.println("2: Kalkulačka");
    System.out.println("3: Rada do života");
    System.out.println("0: Ukončit program");
}

}
1
Petr Průcha 21 jun. 2017 a las 14:38

3 respuestas

La mejor respuesta

El error de una entrada no numérica es que nextInt no está en su bloque try. Los problemas registrados en las otras respuestas me llevan a esta solución. Debe obtener la línea completa como entrada y analizarla en un int. Ahora, además, necesita atrapar un NumberFormatException:

do {
    try {
        String input = scan.nextLine();
        int choose = Integer.parseInt(input);
        // ...
    catch (InputMismatchException | NumberFormatException e) {
        System.out.println("Error in the data you have entered please try again");
    }
} while (true);

No necesita choose fuera de su ciclo porque está utilizando System.exit(0) si la entrada es 0.

1
Stefan Warminski 21 jun. 2017 a las 12:41

Pruebe antes de tomar la entrada para que si hay una excepción en el tipo de entrada, su error quede atrapado en la captura.

package projectprucha;

import java.util.Scanner;
import java.io.*;
import java.util.InputMismatchException;

public class Projectprucha {


public static Scanner scan = new Scanner(System.in);

public static void main(String[] args) {

int Choose;

do {

    writeMenu();
try{
    Choose = scan.nextInt();
    scan.nextLine();


        switch (Choose) {

            case 1:

                Joke vtip = new Joke();
                vtip.Napis();
                JokeII vtipII = new JokeII();
                vtipII.NapisII();
                break;

            case 2:

                Kalkulacka.staticMethod();
                break;

            case 3:

                Moudro rada = new Moudro();
                rada.Rekni();

            case 0:
                System.out.println("You have exited the system");
                System.exit(0);
            default:
                throw new InputMismatchException();
        }
}
    } catch (InputMismatchException e) {
        System.out.println("Error in the data you have entered please 
try again");

    }
} while (Choose != 0);

}

 private static void writeMenu() {
System.out.println("Menu");
System.out.println("1: Něco pro zasmání");
System.out.println("2: Kalkulačka");
System.out.println("3: Rada do života");
System.out.println("0: Ukončit program");
}

}
-1
javaDeveloper 21 jun. 2017 a las 12:05

Tiene su entero de tipo de datos para elegir variable. Por lo tanto, no puede pasar caracteres o cadenas como parámetro de cambio.

Gracias

-2
javaDeveloper 21 jun. 2017 a las 11:43