Как остановить сбой программы? - PullRequest
0 голосов
/ 14 октября 2019

Я хочу, чтобы программа не вылетала, когда пользователь вводит что-либо, кроме числа. Например, если кто-то вводит случайные буквы, на нем должно отображаться сообщение «ввод недействителен, введите правильное целое число». Затем предложите им продолжить или нет.

public static void main(String[] args) throws IOException {

    BufferedWriter out = new BufferedWriter(new FileWriter("outDataFile.txt"));

    Scanner input=new Scanner(System.in);
    int choice = 0;
    String repeat;

    //Loop repeats program until user quits
    do
    {
        //Loop repeats until a valid input is found
        do
        {
            //Asks for number and reads value
            System.out.print("\nEnter an integer and press <Enter> ");
            choice = input.nextInt();

            //Prints error if invalid number
            if(choice <= 0)
                System.out.println("Invalid Input.");

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Существует несколько способов достижения этого:

Сначала необходимо перехватить исключение, выданное Scanner, и пометить цикл, чтобы он продолжался при обнаружении исключения. Это не является хорошей практикой , поскольку исключение, выданное Scanner, InputMismatchException, является непроверенным исключением. Значение причины этого исключения может быть легко обнаружено с помощью оператора if / else.

В вашем случае вы должны попытаться получить входные данные как String, а затем проверить правильность ввода, если оно выглядит как число:

Подход с циклом на символ:

String string = scanner.nextLine();
for (int i = 0; i < string; i++) {
    char ch = string.charAt(i);
    if (!Character.isDigit(ch)) {
        System.out.println("Input is not a number");
        break; // stop the for-loop
    }
}
int input = Integer.parseInt(string);

Подход RegEx:

String numericRegex = "[0-9]+";
String string = scanner.nextLine();

if (!string.matches(numericRegex)) {
    System.out.println("Input is not a number");
}
int input = Integer.parseInt(string);

Это популярный подход кваша проблема, теперь вам решать, как вы будете управлять своими циклами, чтобы они повторялись при обнаружении неверного ввода.

0 голосов
/ 14 октября 2019

Используйте простую попытку catch, которая поймает, и простой рекурсивный метод как таковой:

import java.util.InputMismatchException;импорт java.util.Scanner;

public class Test
{
    public static void main(String[] args)
    {
        System.out.println(getUserInput());
    }

    private static int getUserInput()
    {
        int choice = 0;

        Scanner input = new Scanner(System.in);
        System.out.println("Enter a value");
        try
        {
            choice = input.nextInt();
        } catch (InputMismatchException exception)
        {
            System.out.println("Invalid input. Please enter a numeric value");
            getUserInput();
        }
        return choice;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...