Как использовать BufferedReader, чтобы получить интергер - PullRequest
3 голосов
/ 02 октября 2019

Я пишу небольшую программу для себя и сталкиваюсь с проблемой.

Я хочу иметь возможность набирать число в консоли и извлекать число для переменной. До этого момента я понял.

int aNumber = Integer.parseInt(br.readLine());

За исключением того, что я хочу получить сообщение об ошибке, когда в консоль введено что-то, что не является числом.

Что-то вроде этого, но работает конечно:

void Test() {
    while (true) {
        try {
            aNumber = Integer.parseInt(br.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (aNumber >= 1) {
            System.out.println("Hurray you enterd a number! It is " + aNumber + ".");
            return;
        } else {
            System.out.println("Error: Something went wrong. Please try again.\n");
        }
    }
}

Если вы введете номер, он работает нормально. Но я хочу иметь возможность вводить тексты и получать сообщение об ошибке, чтобы повторить попытку.

Пример, если вы наберете в консоли:

1

Ответ:

Ура, вы ввели номер! Это 1.

=====

2564

Ответ:

Ураввел номер! Это 2564.

=====

eaf123

Ответ:

Ошибка:Что-то пошло не так. Пожалуйста, попробуйте еще раз.

=====

Спасибо всем, кто пытается помочь.

Lars Meeuwsen

Ответы [ 3 ]

3 голосов
/ 03 октября 2019

Это будет работать. Я надеюсь, что вы понимаете решение. Integer.parseInt() выдает NumberFormatException, если синтаксический анализ не удался.

void test() {
            while (true) {
                int aNumber;
                try {
                    aNumber = Integer.parseInt(br.readLine());
                    System.out.println("Hurray you enterd a number! It is " + aNumber + ".");
                    return;
                } catch (NumberFormatException | IOException e) {
                    System.out.println("Error: Something went wrong. Please try again.\n");

                }
            }
        }
1 голос
/ 03 октября 2019

Ваш код не работает, поскольку при вводе строки или любого другого типа, кроме int, генерируется NumberFormatException, а вы его не перехватываете.

Оператор if не нужен, так как блок catch будет выполняться только при наличии текста. При преобразовании будет сгенерировано исключение, поэтому строка ниже не будет выполнена.

Пожалуйста, проверьте этот код

void Test() {
    while (true) {
        try {
            aNumber = Integer.parseInt(br.readLine());
            System.out.println("Hurray you enterd a number! It is " + aNumber + ".");
            return;
        } catch (NumberFormatException | IOException e) {
            e.printStackTrace();
            System.out.println("Error: Something went wrong. Please try again.\n");
        }
    }
}
0 голосов
/ 02 октября 2019

самое простое, что вы можете сделать, это перехватить NumberFormatException и затем напечатать нужное сообщение.

Рабочий пример приведен ниже:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ReadNumber {

    public static void main(String[] args) {
        int aNumber = 0;

        while (true) {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            try {
                aNumber = Integer.parseInt(br.readLine());
            } catch (NumberFormatException e) {
                System.out.println("That wasn't a number.");
                continue;
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (aNumber >= 1) {
                System.out.println("Hurray you entered a number! It is " + aNumber + ".");
                continue;
            } else {
                System.out.println("Error: Something went wrong. Please try again.\n");
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...