从 Jtextfield 输入解析 Double/Int
Parsing Double/Int from Jtextfield Input
我是 Java 的新手,我现在正在尝试创建一个程序,该程序使用 JTextfield
从用户那里接收值并使用该值执行一些计算。我遇到了 JTextfield
会出现 NumberFormatException
错误的问题
当我尝试编译它时。这是我的代码:
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);
这是我尝试编译时得到的结果:
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)
底部还有更多用于显示和算术目的。
此外,我尝试使用 try and catch,但它根本没有解决我的问题。(出现了更多错误。)这是我在使用 try and catch 尝试解决 Number 之后的完整程序格式异常问题。(我知道对于这么简单的算术程序来说它有点太长了。抱歉。)
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);
}
}
我在这里卡了半天,对某些人来说可能还不够长。但我确实需要一些帮助。谢谢。
在第一个示例中,导致问题的行似乎是:
double outhourInput = Double.valueOf(outhour);
引用的异常跟踪表明外出时间为 empty/null。因此,在转换之前,检查 outhour 是否为空(例如,outhour != null && ! outhour.trim().isEmpty()
)。
将代码(来自第二个示例)复制到 IDE 中,很快就会清楚问题出在哪里。您没有 NumberFormatException 本身 的问题。这个问题出现在多个地方,是变量的范围问题。
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;
}
}
在所有块中,您必须确保定义的变量在 catch 块的范围内。但是,我看不出 if 测试的意义,因为它们都将变量设置为 0.0。
尝试以下方法:
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;
}
我是 Java 的新手,我现在正在尝试创建一个程序,该程序使用 JTextfield
从用户那里接收值并使用该值执行一些计算。我遇到了 JTextfield
会出现 NumberFormatException
错误的问题
当我尝试编译它时。这是我的代码:
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);
这是我尝试编译时得到的结果:
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)
底部还有更多用于显示和算术目的。 此外,我尝试使用 try and catch,但它根本没有解决我的问题。(出现了更多错误。)这是我在使用 try and catch 尝试解决 Number 之后的完整程序格式异常问题。(我知道对于这么简单的算术程序来说它有点太长了。抱歉。)
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);
}
}
我在这里卡了半天,对某些人来说可能还不够长。但我确实需要一些帮助。谢谢。
在第一个示例中,导致问题的行似乎是:
double outhourInput = Double.valueOf(outhour);
引用的异常跟踪表明外出时间为 empty/null。因此,在转换之前,检查 outhour 是否为空(例如,outhour != null && ! outhour.trim().isEmpty()
)。
将代码(来自第二个示例)复制到 IDE 中,很快就会清楚问题出在哪里。您没有 NumberFormatException 本身 的问题。这个问题出现在多个地方,是变量的范围问题。
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;
}
}
在所有块中,您必须确保定义的变量在 catch 块的范围内。但是,我看不出 if 测试的意义,因为它们都将变量设置为 0.0。
尝试以下方法:
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;
}