java - bufferedreader helper类无法获取第二个输入

时间:2011-04-26 12:58:02

标签: java

在下班后或研究中仍然苦苦挣扎。我有一个简单的帮助类,这是我第一次涉及try / catch错误处理。我想知道一个输入是否对所需的类型有效,如果它不是......简单或者我想,请求新的输入。该课程用于简单的定期存款计算器,并被多次调用(即初始存款,利率等)。

这是违规类,如果这还不足以解决,我会发布一些额外的片段。

private Float inFloat;
private String temp;
private int inInt;
private String inString;
BufferedReader in = null;
boolean validInput = false;

public Float getFloat(String prompt) {
    validInput = false;
    do {
        try {
            in = new BufferedReader(new InputStreamReader(System.in));
            System.out.print(prompt);
            temp = in.readLine();
            inFloat = Float.valueOf(temp);
            validInput = true;
        } catch (IOException e) {
            System.out.println("Please enter a valid float value");
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    } while (validInput == false);
    return inFloat;
}

更新 - 已修复!!!

感谢您的快速反馈...我设法找到另一篇文章,提到我不应该关闭BufferedReader并提出以下调整,以便现在可以正常工作。我现在也正在捕捉NumberFormatException ...感谢提示:)

现在不知道为什么它不能关闭BufferedReader ......但我会得到结果!!

private Float inFloat;
private String temp;
private int inInt;
private String inString;
BufferedReader in = null;
boolean validInput = false;

public Float getFloat(String prompt) {
    validInput = false;
    do {
        try {
            in = new BufferedReader(new InputStreamReader(System.in));
            System.out.print(prompt);
            temp = in.readLine();
            inFloat = Float.valueOf(temp);
            validInput = true;
        } catch (NumberFormatException e) {
            System.out.println("Please enter a valid float value");
        } catch (IOException e) {
            e.printStackTrace();
        }
    } while (validInput == false);
    return inFloat;
}

1 个答案:

答案 0 :(得分:0)

Float.valueOf(String s)如果无法解析输入,则会抛出NumberFormatException。除了IOException之外,还要抓住那个。

在您的代码中,抛出NumberFormatException(如果输入无效)但未在方法内捕获,因此该方法将在完成finally块后立即返回。