2011-04-26 65 views
0

继续苦苦挣扎,继续工作时间或研究..我有一个简单的帮助类,这是我第一次尝试/ catch错误处理。我想知道,如果输入对所需类型有效,并且要求输入新输入(如果它不是......简单或我想的)。该课程正用于简单的定期存款计算器中,称为多次(即初始存款,利率等)。Java - 缓冲阅读器帮助类无法获得第二个输入

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

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

你有什么具体问题吗?请注意,Float.valueOf可以抛出IOException以外的异常,如果它发生异常,则不会捕获它们。 – MeBigFatGuy 2011-04-26 13:09:42

+0

你可以显示一个链接,建议不要关闭阅读器吗?它没有多大意义,除非'close'会影响'System.in'。 – 2011-04-26 13:27:48

+0

@Andreas_D我可能不正确,从以下链接解释了该行为的过程:http://stackoverflow.com/questions/5202060/issue-reading-input-from-java-system-in – Stu 2011-04-26 14:05:56

回答

0

Float.valueOf(String s)将抛出一个NumberFormatException如果它不能解析输入。除了IOException之外,还要抓住那个。

在你的代码中,NumberFormatException被抛出(如果输入无效)但在方法内部没有捕获,所以方法将在完成finally块后立即返回。