Java 如何使用BufferedReader获取整数

Java 如何使用BufferedReader获取整数,java,console,int,Java,Console,Int,我正在为自己写一个小程序,突然遇到了一个问题 我希望能够在控制台中键入一个数字,并提取变量的数字。 直到现在我才明白 int aNumber = Integer.parseInt(br.readLine()); 除非我想在控制台中输入的不是数字的东西时出错 类似这样的东西,但当然起作用: void Test() { while (true) { try { aNumber = Integer.parseInt(br.readLine());

我正在为自己写一个小程序,突然遇到了一个问题

我希望能够在控制台中键入一个数字,并提取变量的数字。 直到现在我才明白

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。

=====

2564

答复:

万岁!你输入了一个数字!是2564。

=====

eaf123

答复:

错误:出了问题。请重试。

=====

谢谢大家的帮助


Lars Meeuwsen

您可以做的最简单的事情是捕获
数字格式异常
,然后打印您想要的消息

请参见下面的工作示例:

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");
            }
        }
    }
}

这会奏效的。我希望你能理解解决办法<如果解析失败,code>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");

                }
            }
        }

您的代码不起作用,因为输入字符串或除
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");
        }
    }
}