任何人都可以帮助我学习Java程序吗?我目前正在制作货币转换器,我需要做一个选项,用户可以输入英镑金额并点击转换它进行转换,然后可以选择输入自己的汇率进行计算和转换时单击然后它将使用用户输入的汇率而不是我设置的汇率。这是我到目前为止将英镑转换为美元的代码,该程序在我输入金额并且自己也输入汇率时起作用,但是将输入汇率框留空并使用固定汇率设置的选项带来了转换时出错:
public class cConverter extends javax.swing.JFrame {
double GBPtoUSD = 1.288;
//this is the constant exchange rate for GBP to USD.
private void BtnConvertActionPerformed(java.awt.event.ActionEvent evt) {
double ConvertFromGBP = Double.parseDouble(InputFrom.getText());
double GetExchange = Double.parseDouble(ExchangeRateFrom.getText());
/* Input from is where the user inputs the GBP amount they want converted.
ExchangeRateFrom is the optional exchange rate box where the user inputs an
updated exchange rate if the constant one is out of date. */
if (CurrencyTop.getSelectedItem().equals("USD")) {
String cGBPtoUSD = String.format("%.2f", ConvertFromGBP * GBPtoUSD);
ConvertedFrom.setText(cGBPtoUSD);
}
else if (CurrencyTop.getSelectedItem().equals("USD")) {
String uGBPtoUSD = String.format("%.2f", GetExchange * ConvertFromGBP);
ConvertedFrom.setText(uGBPtoUSD);
}
/* CurrencyTop is a combo box containing the currencies to convert to.
ConvertedFrom is the calculation output label. */
在没有输入汇率的情况下进行转换时出现错误异常(当没有输入此框时,应使用GBPtoUSD加倍):
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
下面是行动中错误的GIF: https://gyazo.com/af8d681e8f5cf190b2ed2c61b53efa8e
以下是基于某些反馈的更新版本,但我仍然遇到同样的错误: https://gist.github.com/liamrice18/2aae2ec72bdfa34ea308519d131c47b8
谢谢
答案 0 :(得分:1)
在解析ExchangeRateFrom.getText()中的double值之前,请打印该值并验证它是否仅包含数字。 例如,使用下面的代码来查找用户是否正确输入了值。 确认后,您可以解析它,否则将字符串转换为数字格式,然后解析它。
try {//put all the logic inside the try catch block
double ConvertFromGBP = Double.parseDouble(InputFrom.getText());
double GetExchange = Double.parseDouble(ExchangeRateFrom.getText());
} catch(NumberFormatException nfe){//log or print the values and make sure they are numeric
System.out.println(InputFrom.getText());
System.out.println(ExchangeRateFrom.getText());
//correct the value (remove special chars and try parsing again)
}
答案 1 :(得分:1)
你在检查之前调用了解析,所以当程序运行时,它将在第6行或第7行崩溃,具体取决于哪个字段为空,并且不会到达检查。将解析放在程序的末尾,以确保您实际检查输入字段是否为空。