2017-03-03 1 views
1

Ceci est le code et quand je saisis une lettre il n'afficherait pas la ligne .matches à la place j'ai eu une erreur mais si je retire le parseFloat rec1 et enlève le else if (rec1 < total) puis la ligne .matches affichera s'il vous plaît aidez-moi comment faire cela merci d'avancejava.lang.NumberFormatException Pour la valeur de la chaîne d'entrée est

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

      } 

// erreur

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

Vous devez vérifier si elle correspond avant d'essayer l'analyse syntaxique. – shmosel

+0

Et vous devez vérifier s'il est vide avant de vérifier s'il correspond. – shmosel

+1

Vérifiez cette condition avant d'analyser la valeur 'if (! Receive.matches (" [0-9] + "))'. –

Répondre

2

Dans le message d'erreur, l'impression que vous entrez "asdasd" à jTextField1. Cette valeur que vous essayez d'analyser pour flotter. Float.parseFloat(string) lancera une exception NumberFormatException si la chaîne n'est pas numérique. Dans la méthode parseFloat(), le paramètre de chaîne sera converti en une valeur flottante primitive.

Vous pouvez vérifier que la valeur entrée est numérique ou non, puis l'analyser pour qu'elle soit flottante.

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

La méthode est

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

hey merci à ce sujet il m'a aidé à résoudre mon problème, mais il y a un petit problème après il s'exécute si je saisis une lettre il affichera Entrez un montant valide après que vous appuyez sur ok alors Insufficient Amount apparaîtra aussi comment résoudre ce problème? Je suis désolé pour les questions, mais je suis encore en train d'apprendre à propos de Java merci encore à l'avance – JoMS

+0

Essayez le code changé. C'est parce que le chèque if (rec1

+0

@jomsdakis, j'espère que ça a marché pour toi –