2016-04-01 11 views
0

Ich bin neu in Java und ich versuche jetzt, ein Programm zu erstellen, die Wert von Benutzer JTextfield erhalten und den Wert verwenden, um einige Berechnungen durchzuführen. Ich habe ein Problem festgestellt, dass die JTextfieldNumberFormatException Fehler haben, wenn ich versuche, es zu kompilieren. Hier ist mein Code:Parsing Double/Int von Jtextfield Eingabe

import javax.swing.*; 
import java.lang.*; 
public class VehicleParking { 
    public static void main(String args[]) { 
     JTextField inh = new JTextField(2); 
     JTextField inm = new JTextField(2); 
     JTextField outh = new JTextField(2); 
     JTextField outm = new JTextField(2); 

     JPanel InPanel = new JPanel(); 
     InPanel.add(new JLabel("In Hours: ")); 
     InPanel.add(inh); 
     String inhour = inh.getText(); 
     double inhourInput = Double.valueOf(inhour); 
     InPanel.add(Box.createHorizontalStrut(15)); 
     InPanel.add(new JLabel("Minutes :")); 
     InPanel.add(inm); 
     String inminute = inm.getText(); 
     double inminuteInput = Double.valueOf(inminute); 

     JPanel OutPanel = new JPanel(); 


     OutPanel.add(new JLabel("Out Hours: ")); 
     OutPanel.add(outh); 
     String outhour = outh.getText(); 
     double outhourInput = Double.valueOf(outhour); 
     OutPanel.add(Box.createHorizontalStrut(15)); 
     OutPanel.add(new JLabel("Minutes :")); 
     OutPanel.add(outm); 
     String outminute = outm.getText(); 
     double outminuteInput = Double.valueOf(outminute); 

Und hier ist das, was ich bekomme, wenn ich versuche, es zu kompilieren:

Exception in thread "main" java.lang.NumberFormatException: empty String 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842) 
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
    at java.lang.Double.parseDouble(Double.java:538) 
    at java.lang.Double.valueOf(Double.java:502) 
    at VehicleParking.main(VehicleParking.java:23) 

Es ist mehr an der Unterseite für die Anzeige und arithmetischen Zweck. Auch habe ich versucht, versuchen und fangen, aber es löst mein Problem überhaupt nicht. (Noch mehr Fehler wurden angezeigt.) Hier sind meine vollständigen Programm nach dem Versuch und fangen zu versuchen, die zu lösen Nummer Format Exception Problem. (ich weiß, es ist irgendwie zu lang für eine solche einfache arithmetische Programm. es tut uns Leid.)

import javax.swing.*; 
import java.lang.*; 
public class VehicleParking { 
    public static void main(String args[]) { 
     JTextField inh = new JTextField(2); 
     JTextField inm = new JTextField(2); 
     JTextField outh = new JTextField(2); 
     JTextField outm = new JTextField(2); 

     JPanel InPanel = new JPanel(); 
     InPanel.add(new JLabel("In Hours: ")); 
     InPanel.add(inh); 
     InPanel.add(Box.createHorizontalStrut(15)); 
     InPanel.add(new JLabel("Minutes :")); 
     InPanel.add(inm); 

     JPanel OutPanel = new JPanel(); 


     OutPanel.add(new JLabel("Out Hours: ")); 
     OutPanel.add(outh); 
     OutPanel.add(Box.createHorizontalStrut(15)); 
     OutPanel.add(new JLabel("Minutes :")); 
     OutPanel.add(outm); 




     int choice = JOptionPane.showConfirmDialog(null, InPanel, "Vehicle Parking System",JOptionPane.OK_CANCEL_OPTION); 
      if (choice == JOptionPane.OK_OPTION) 
       { 
        try 
         {String inhour = inh.getText(); 
         double inhourInput = Double.valueOf(inhour);} 
        catch (NumberFormatException e){ 
         if (inhour == null || inhour.equals("")) 
          {inhourInput = 0.0;} 
         else 
          {inhourInput = 0.0;}} 


        try 
         {String inminute = inm.getText(); 
         double inminuteInput = Double.valueOf(inminute);} 
        catch (NumberFormatException e){ 
         if (inminute == null || inminute.equals("")) 
          {inminuteInput = 0.0;} 
         else 
          {inminuteInput = 0.0;}} 

        int choice2 = JOptionPane.showConfirmDialog(null, OutPanel, "Vehicle Parking System",JOptionPane.OK_CANCEL_OPTION); 
        if (choice2 == JOptionPane.OK_OPTION) 
         { 
          try 
           {String outhour = outh.getText(); 
           double outhourInput = Double.valueOf(outhour);} 
          catch (NumberFormatException e){ 
           if (outhour == null || outhour.equals("")) 
            {outhourInput = 0.0;} 
           else 
            {outhourInput = 0.0;}} 

          try 
           {String outminute = outm.getText(); 
           double outminuteInput = Double.valueOf(outminute);} 
          catch (NumberFormatException e){ 
           if (outminute == null || outminute.equals("")) 
            {outminuteInput = 0.0;} 
           else 
            {outminuteInput = 0.0;}} 
         double hour = outhourInput - inhourInput; 
         double minute = outminuteInput - inminuteInput; 
         String[] VehicleType = {"Car","Van","Bus","Lorry"}; 
         String typeVehicle =(String)JOptionPane.showInputDialog (null, "Choose vehicle type: ","Vehicle Parking System",JOptionPane.PLAIN_MESSAGE, 
                       null,VehicleType,VehicleType[0]); 
         switch (typeVehicle) 
          {case "Car" : if (minute <0) 
               {minute = minute +60; 
               hour = hour - 1; 
               double calcalateDuration = hour + (minute/60); 
               double fee = calcalateDuration; 
               String show = "Parking fee: "+fee; 
               JOptionPane.showMessageDialog(null,show,"Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               JOptionPane.showMessageDialog(null,"Please take your receipt.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               String receipt = "In time: "+inhourInput+" "+inminuteInput+ 
                    "\nOut time: "+outhourInput+" "+inminuteInput+ 
                    "\nDuration: "+hour+"hours and "+minute+"minutes."+ 
                    "\nVehicle Type: "+typeVehicle+ 
                    "\nParking fee: "+fee; 
               JOptionPane.showMessageDialog(null,receipt,"Vehicle Parking System - Parking Receipt",JOptionPane.INFORMATION_MESSAGE);} 
              else 
               {double calcalateDuration = hour + (minute/60); 
               double fee = calcalateDuration; 
               String show = "Parking fee: "+fee; 
               JOptionPane.showMessageDialog(null,show,"Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               JOptionPane.showMessageDialog(null,"Please take your receipt.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               String receipt = "In time: "+inhourInput+" "+inminuteInput+ 
                    "\nOut time: "+outhourInput+" "+inminuteInput+ 
                    "\nDuration: "+hour+"hours and "+minute+"minutes."+ 
                    "\nVehicle Type: "+typeVehicle+ 
                    "\nParking fee: "+fee; 
               JOptionPane.showMessageDialog(null,receipt,"Vehicle Parking System - Parking Receipt",JOptionPane.INFORMATION_MESSAGE);} 
              break; 

          case "Van" : if (minute <0) 
               {minute = minute +60; 
               hour = hour - 1; 
               double calcalateDuration = hour + (minute/60); 
               double fee = calcalateDuration*120/100; 
               String show = "Parking fee: "+fee; 
               JOptionPane.showMessageDialog(null,show,"Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               JOptionPane.showMessageDialog(null,"Please take your receipt.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               String receipt = "In time: "+inhourInput+" "+inminuteInput+ 
                    "\nOut time: "+outhourInput+" "+inminuteInput+ 
                    "\nDuration: "+hour+"hours and "+minute+"minutes."+ 
                    "\nVehicle Type: "+typeVehicle+ 
                    "\nParking fee: "+fee; 
               JOptionPane.showMessageDialog(null,receipt,"Vehicle Parking System - Parking Receipt",JOptionPane.INFORMATION_MESSAGE);} 
              else 
               {double calcalateDuration = hour + (minute/60); 
               double fee = calcalateDuration*120/100; 
               String show = "Parking fee: "+fee; 
               JOptionPane.showMessageDialog(null,show,"Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               JOptionPane.showMessageDialog(null,"Please take your receipt.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               String receipt = "In time: "+inhourInput+" "+inminuteInput+ 
                    "\nOut time: "+outhourInput+" "+inminuteInput+ 
                    "\nDuration: "+hour+"hours and "+minute+"minutes."+ 
                    "\nVehicle Type: "+typeVehicle+ 
                    "\nParking fee: "+fee; 
               JOptionPane.showMessageDialog(null,receipt,"Vehicle Parking System - Parking Receipt",JOptionPane.INFORMATION_MESSAGE);} 
              break; 
          case "Bus" : if (minute <0) 
               {minute = minute +60; 
               hour = hour - 1; 
               double calcalateDuration = hour + (minute/60); 
               double fee = calcalateDuration*140/100; 
               String show = "Parking fee: "+fee; 
               JOptionPane.showMessageDialog(null,show,"Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               JOptionPane.showMessageDialog(null,"Please take your receipt.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               String receipt = "In time: "+inhourInput+" "+inminuteInput+ 
                    "\nOut time: "+outhourInput+" "+inminuteInput+ 
                    "\nDuration: "+hour+"hours and "+minute+"minutes."+ 
                    "\nVehicle Type: "+typeVehicle+ 
                    "\nParking fee: "+fee; 
               JOptionPane.showMessageDialog(null,receipt,"Vehicle Parking System - Parking Receipt",JOptionPane.INFORMATION_MESSAGE);} 
              else 
               {double calcalateDuration = hour + (minute/60); 
               double fee = calcalateDuration*140/100; 
               String show = "Parking fee: "+fee; 
               JOptionPane.showMessageDialog(null,show,"Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               JOptionPane.showMessageDialog(null,"Please take your receipt.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               String receipt = "In time: "+inhourInput+" "+inminuteInput+ 
                    "\nOut time: "+outhourInput+" "+inminuteInput+ 
                    "\nDuration: "+hour+"hours and "+minute+"minutes."+ 
                    "\nVehicle Type: "+typeVehicle+ 
                    "\nParking fee: "+fee; 
               JOptionPane.showMessageDialog(null,receipt,"Vehicle Parking System - Parking Receipt",JOptionPane.INFORMATION_MESSAGE);} 
              break; 

          case "Lorry" : if (minute <0) 
               {minute = minute +60; 
               hour = hour - 1; 
               double calcalateDuration = hour + (minute/60); 
               double fee = calcalateDuration*160/100; 
               String show = "Parking fee: "+fee; 
               JOptionPane.showMessageDialog(null,show,"Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               JOptionPane.showMessageDialog(null,"Please take your receipt.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               String receipt = "In time: "+inhourInput+" "+inminuteInput+ 
                    "\nOut time: "+outhourInput+" "+inminuteInput+ 
                    "\nDuration: "+hour+"hours and "+minute+"minutes."+ 
                    "\nVehicle Type: "+typeVehicle+ 
                    "\nParking fee: "+fee; 
               JOptionPane.showMessageDialog(null,receipt,"Vehicle Parking System - Parking Receipt",JOptionPane.INFORMATION_MESSAGE);} 
              else 
               {double calcalateDuration = hour + (minute/60); 
               double fee = calcalateDuration*160/100; 
               String show = "Parking fee: "+fee; 
               JOptionPane.showMessageDialog(null,show,"Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               JOptionPane.showMessageDialog(null,"Please take your receipt.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 
               String receipt = "In time: "+inhourInput+" "+inminuteInput+ 
                    "\nOut time: "+outhourInput+" "+inminuteInput+ 
                    "\nDuration: "+hour+"hours and "+minute+"minutes."+ 
                    "\nVehicle Type: "+typeVehicle+ 
                    "\nParking fee: "+fee; 
               JOptionPane.showMessageDialog(null,receipt,"Vehicle Parking System - Parking Receipt",JOptionPane.INFORMATION_MESSAGE);} 
              break; 
          default  : JOptionPane.showMessageDialog(null,"Unknown Error Occurred!","Vehicle Parking System",JOptionPane.ERROR_MESSAGE); 
              break;}} 


        else 
         JOptionPane.showMessageDialog(null,"Process Canceled.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE);} 
      else 
       JOptionPane.showMessageDialog(null,"Process Canceled.","Vehicle Parking System",JOptionPane.INFORMATION_MESSAGE); 



    } 
} 

ich habe hier für einen halben Tag stucked worden, vielleicht nicht lange genug für einige Menschen. Aber ich brauche wirklich Hilfe. Vielen Dank.

+0

Nur klar zu sein; Sie erhalten einen Fehler, wenn Sie _compile_? Unter welcher Zeilennummer? – KevinO

+0

Ich habe den Beitrag mit zusätzlichen Ergebnissen bearbeitet, dass ich den Ausnahmefehler beim Kompilieren erhalten habe, ohne zu versuchen und zu fangen. – LeonSeveron

+0

OK, das untere Beispiel mit dem Try/Catch-Ansatz ist ein besserer ** ** wenn Sie das Problem mit den Variablen beheben. Sie sollten immer versuchen, Nummernausnahme zu fangen. – KevinO

Antwort

0

Im ersten Beispiel scheint es, die Linie, die das Problem verursacht ist:

double outhourInput = Double.valueOf(outhour); 

Die Spur Ausnahme zeigt verwiesen, dass outhour leer/null ist. Überprüfen Sie daher vor der Konvertierung, ob Outhour leer ist (z. B. outhour != null && ! outhour.trim().isEmpty()).

Nachdem der Code (aus dem 2. Beispiel) in eine IDE kopiert wurde, ist schnell klar, wo das Problem liegt. Sie nicht haben ein Problem mit NumberFormatException per se. Das Problem, das an mehreren Stellen auftritt, ist ein Einschränkungsproblem bei den Variablen.

 if (choice == JOptionPane.OK_OPTION) { 
     try { 
      String inhour = inh.getText(); //-->inhour defined here 
      double inhourInput = Double.valueOf(inhour); 
     } 
     catch (NumberFormatException e) { 
      if (inhour == null || inhour.equals("")) { //-->no scope for inhour 
       inhourInput = 0.0; 
      } 
      else { 
       inhourInput = 0.0; 
      } 
     } 

In allen Ihren Blöcken müssen Sie sicherstellen, dass die definierte Variable in den Catch-Blöcken im Gültigkeitsbereich ist. Allerdings sehe ich den Punkt der if Tests nicht, da sie alle auf die Variable auf 0.0 setzen.

einen Ansatz Versuchen wie:

double inhourInput = 0.0; 
String inhour = inh.getText(); 
try { 
    inhour = inh.getText(); 
    inhourInput = Double.valueOf(inhour); 
} 
catch (NumberFormatException e) { 
    // do not really need to reset to 0, but can be useful for clarity 
    inhoutInput = 0.0; 
} 
+0

Große Lösung für mich. Es hat mein Problem vollständig gelöst. Danke vielmals! Obwohl ich einen kleinen Fehler über die "Inhour" habe zweimal erklärt. Aber es kann leicht gelöst werden. Danke noch einmal! – LeonSeveron

+0

@LeonSeveron, Sie sind richtig, ich habe es versäumt, die String-Deklaration in der 'try {' zu entfernen, wie ich Sachen umher bewegte. Hat den Schnitt gemacht. Froh, dass es geholfen hat. – KevinO

Verwandte Themen