Excepción problema de Java con el escáner y el método

Infinito:

Tengo algunos problemas con la puesta en java escáner después de una salida, en un bucle while. el escáner digitaliza el método que debe ir y luego, cuando se trata de nuevo al comienzo del bucle restablecer la variable.

Ya he probado esto, y no pudo encontrar ninguna solución comprensible (im realmente nuevo a Java, y es difícil para mí), o para resolver mi auto. aquí está el código completo (sé que el código no es tan eficiente):

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int con=1;
        System.out.println("Hey!,welcome to my games!");
        Scanner scanner=new Scanner(System.in);
        String game;
        while(con==1) 
        {
            System.out.println("Here Some games i have(Enter the text for the one you want):\nto stop=0\n1)calculator=1\n2)!Soon! Random numbers");
            game=scanner.nextLine();
            calculator();
            scanner.reset();
            System.out.println(game);
//          if(game.equals("0")) {
//              con=0;
//          }
//          else if(game.equals("1")) {

//              System.out.println("Welcome Back!");
//          }
//          else {
//              System.out.println("There is a mistake in your text");
//          }

        }
    scanner.close();
    }
    static void calculator() {
        int num1,num2,con=1,stop=1;
        String op,ad="add",su="sub",mul="multi",di="div";
        Scanner af=new Scanner(System.in);  
        while (con==1) {
            stop=1;
            System.out.println("Write number 1");
            num1=af.nextInt();
            System.out.println("Write number 2");
            num2=af.nextInt();
            System.out.println("Write an operation (one of these):\nAddition=add\nSubtraction=sub\nMultiplication=multi\nDivision=div");
            op=af.next();
            op=op.toLowerCase();
            int minus=num1-num2;
            int plus=num1+num2;
            if(op.equals(ad)) {
                System.out.println("The Operation is:Addition\n"+num1+"+"+num2+"="+plus);
            }
            else if(op.equals(su)){
                System.out.println("The Operation is:Subtraction\n"+num1+"-"+num2+"=" + minus);
            }
            else if(op.equals(mul)){
                System.out.println("The Operation is:Multiplication\n"+num1+"*"+num2+"="+num1*num2);
            }
            else if(op.equals(di)){
                System.out.println("The Operation is:Division\n"+num1+"/"+num2+"="+num1/num2);
            }
            else {
                System.out.println("Um,Did you make a mistake in your text?\nDo you want the calculator again?");
                String yn=af.next();
                yn=yn.toLowerCase();
                if (yn.equals("yes") || yn.equals("yep")) {
                    stop=0;
            }
            }
            if (stop==1) {
                con=0;
            }
            }
    af.close();
    }
}

como se puede ver, yo he intentado resolverlo e incluso poner un comentario en una parte del código, pero cuando se ejecuta el método y regresa, se produce un error porque el escáner piensa que hay algo para escanear antes de escribir algo. aquí es la excepción-

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1478)
    at Main.main(Main.java:12)
Arvind Kumar Avinash:

Usar Scanner::nextLineen lugar de Scanner::next, Scanner::nextIntetc. Compruebe escáner se está saltando nextLine () después de ir al lado () o nextFoo ()? para saber por qué.

Además, trate de utilizar do...whilesiempre que se necesite para pedir al usuario que introduzca los datos de nuevo en caso de una entrada no válida.

A continuación se realiza un código de ejemplo la incorporación de estos puntos:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int option;
        boolean valid;
        Scanner input2 = new Scanner(System.in);
        do {
            valid = true;
            System.out.println("Choose an option:\n" + "1-Addition\n" + "2-Subtraction\n" + "3-Exit");
            try {
                option = Integer.parseInt(input2.nextLine());
                if (option < 1 || option > 3) {
                    throw new IllegalArgumentException();
                }
                // ...Place here the rest of code (which is based on the value of option)
            } catch (IllegalArgumentException e) {
                System.out.println("This is an invalid entry. Please try again.");
                valid = false;
            }
        } while (!valid);
    }
}

Un análisis de la muestra:

Choose an option:
1-Addition
2-Subtraction
3-Exit
x
This is an invalid entry. Please try again.
Choose an option:
1-Addition
2-Subtraction
3-Exit
10.5
This is an invalid entry. Please try again.
Choose an option:
1-Addition
2-Subtraction
3-Exit
1

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=389553&siteId=1
Recomendado
Clasificación