Пользователь поставил строку вместо целого числа - PullRequest
0 голосов
/ 26 апреля 2020

Я начинающий с java, и я создал код, который пользователь вводит число, но если он пишет строку вместо целого числа, это ошибка, как я могу контролировать ошибку, чтобы показать сообщение пользователю? Вот ошибка:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Main.main(Main.java:21)

Process finished with exit code 1

А вот мой код:

import java.util.Scanner;
import java.util.ArrayList;

public class Main extends MyZoo {

    public static void main(String[] args) {

        System.out.println("1.View all available zoo animals");

        Scanner input = new Scanner(System.in);
        System.out.print("Write Here: ");
        int UserInput = input.nextInt();

        while (true) {

            try
            {
                return input.nextInt();
            }
            catch (InputMismatchException e)
            {
                input.next();
                System.out.print("That’s not an integer. Try again: ");
            }
       }
    }
}

Ответы [ 3 ]

0 голосов
/ 26 апреля 2020

Ваш код имеет значение fl aws:

  • у основного метода нет (не должно быть) оператора возврата
  • , который необходимо импортировать java.util.InputMismatchException
  • вы не назначаете пользовательский ввод для вашей переменной UserInput

Вот ваш код с устраненными выше проблемами. Как и код ничего не делает, кроме получения и распечатки ввода. Попробуйте добавить условие для завершения вашей программы или добавить логи c, чтобы что-то сделать с помощью ввода.

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

public class NewClass1 {
    public static void main(String[] args) {
        System.out.println("1.View all available zoo animals");

        Scanner input = new Scanner(System.in);

        int UserInput;

        while (true) {
            try
            {
                System.out.println("Write Here: ");
                UserInput = input.nextInt();
                System.out.println("Inputed value: " + UserInput);
            }
            catch (InputMismatchException e)
            {
                input.next();
                System.out.println("That’s not an integer. Try again: ");
            }
        }
    }
}
0 голосов
/ 26 апреля 2020

Я думаю, что проблема в улове. Это должно быть NumberFormatException вместо InputMismatchException.

Следующий кодовый блок работает для вас.

public static void main(String[] args) {
    System.out.println("1.View all available zoo animals");
    System.out.print("Write Here: ");

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();

    while (true) {
        try {
            int userInput = Integer.parseInt(input);
        } catch (NumberFormatException e) {
            System.out.println("Wrong input.");
            System.out.print("Write Here: ");
            input = scanner.nextLine();
        }
    }
}
0 голосов
/ 26 апреля 2020

Ваш try catch выглядит хорошо, но вы должны поместить первое int UserInput = input.nextLine() в try, конечно.

Возможно, вы хотите что-то вроде этого:

System.out.println("1.View all available zoo animals");

Scanner input = new Scanner(System.in);
while (true) {

    try
    {
        System.out.print("Write Here: ");
        int UserInput = input.nextInt();
        System.out.println("Your input: " + UserInput);
    }
    catch (InputMismatchException e)
    {
        input.next();
        System.out.print("That’s not an integer. Try again: ");
    }
}
...