2017-03-03 77 views
1

这是代码,当我输入一个字母它不会显示行.matches相反,我得到一个错误,但如果我删除了parseFloat rec1并删除其他if( rec1 < total)那么.matches行会显示请帮助我如何提前谢谢java.lang.NumberFormatException对于输入字符串值是字母

CashType c = new CashType(); c.setVisible(true);

c.jButton1.addActionListener(new java.awt.event.ActionListener() { 

     public void actionPerformed(java.awt.event.ActionEvent evt) { 
     String receive = c.jTextField1.getText(); 


     float total = total("sellno"+SellNoCount.getText()); 
     float rec1 = Float.parseFloat(receive); //this is line 1525 

      if(!receive.matches("[0-9]+")){ 
       JOptionPane.showMessageDialog(null,"Enter a Valid Amount"); 
       c.jTextField1.setText(""); 

      } 

      else if(receive.equalsIgnoreCase("")){ 
       JOptionPane.showMessageDialog(null,"Enter Amount"); 
      } 
      else if(rec1 < total){ 

       JOptionPane.showMessageDialog(null,"Insufficient Amount"); 

      } 

//错误

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "asdasd" 
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122) 
at java.lang.Float.parseFloat(Float.java:451) 
at projectfinal.SellPage$32.actionPerformed(SellPage.java:1525) 
+0

您需要检查,如果它试图解析之前匹配。 – shmosel

+0

你需要检查它是否为空,然后检查它是否匹配。 – shmosel

+1

在解析值'if(!receive.matches(“[0-9] +”))''之前检查此条件。 –

回答

2

从错误信息,它看起来就像你正在进入 “asdasd” 到jTextField1。你试图解析这个值来浮动。如果字符串不是数字,Float.parseFloat(string)将抛出NumberFormatException。在parseFloat()方法中,字符串参数将被转换为基本浮点值。

您可以检查输入的值是否为数字,然后将其解析为浮点数。

float rec1 = 0; 

    if(isNumeric(receive)){ 
     rec1 = Float.parseFloat(receive); 
     if(rec1 < total){ 

     JOptionPane.showMessageDialog(null,"Insufficient Amount"); 

     } 
    }else { 
      JOptionPane.showMessageDialog(null,"Enter a Valid Amount"); 
      c.jTextField1.setText(""); 
     } 

的方法是

public static boolean isNumeric(String s) { 
    return s.matches("[-+]?\\d*\\.?\\d+"); 
} 
+0

嘿谢谢你关于这个,它帮助我解决了我的问题,但它运行后有一个小问题,如果我输入一个字母,它会显示输入一个有效金额后,你按OK,然后不足量将弹出如何解决呢?即时通讯抱歉的问题,但即时通讯仍在学习有关Java再次感谢您 – JoMS

+0

尝试更改后的代码。这是因为如果(rec1 <总)检查保持了 –

+0

@jomsdakis,希望这一次它为你工作 –

相关问题