在下班后或研究中仍然苦苦挣扎。我有一个简单的帮助类,这是我第一次涉及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;
}
答案 0 :(得分:0)
Float.valueOf(String s)
如果无法解析输入,则会抛出NumberFormatException
。除了IOException
之外,还要抓住那个。
在您的代码中,抛出NumberFormatException
(如果输入无效)但未在方法内捕获,因此该方法将在完成finally
块后立即返回。