我正在写一个ATM代码,但是我面临一个简单的问题(我希望),这是我单击"存款"按钮时,一个新窗口弹出了上面的按钮(0到9),用户输入他希望的金额,然后按提交,标签中的文本将翻倍,然后返回到存款方法,该方法将余额(倍)增加到返回的金额。问题是当用户打开弹出存款,然后通过单击x按钮将其关闭时,字符串返回一个空字符,这给我带来了错误(numberFormateXception:empty String),因为您无法将null解析为double。p>我尝试了一个if语句,说明字符串为null,让它为" 0",但是交易历史记录(字符串数组)商店"存款:0 $",这不是真的,因为他没有't单击"提交"按钮(也是不合逻辑的)。因此,我需要知道字符串是否为null是否可能喜欢终止操作并返回上一个场景而不会返回存款方法的任何值。
这是返回代码
String value = labelNum.getText();
if(value == null || value.isEmpty()) { value = ""; }
return Double.valueOf(value);
这是返回到:
的方法 public void setDeposit(double deposit) { balance = balance + deposit; }
与@failingCoder一起使用,您可以在if
语句中以及在setDeposit()
功能中添加一些防御性编码,并在deposit = 0
语句中检查代码。例如,
if(value != null && !value.isEmpty()){
return Double.valueOf(value);
}
else
return 0.0;
和setDeposit()
功能
public void setDeposit(double deposit)
{
if(deposit > 0) //to avoid negative entries else != should also work
balance = balance + deposit;
}
我会推荐某些内容,假设您有适当的正则过滤字母符号符号,但是您的措辞方式使它听起来不应该是问题,因为我只有数字1-9我对其进行了编码,因此您了解发生了什么,那么您不想返回null或0.0,具体取决于您的编码方式,您可以绑定帐户余额和标签必须"刷新"我讨厌的标签,但这只是为了使您了解有关此问题的其他方法
public class Main extends Application {
private Label balanceLabel;
private double accountBalance = 0.0;
@Override
public void start(Stage primaryStage) throws Exception {
balanceLabel = new Label();
setNewAccountBalanceLabel();
Button depositButton = new Button("Deposit Money");
depositButton.setOnAction(event -> depositAction());
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);
vBox.getChildren().addAll(balanceLabel, depositButton);
Stage stage = new Stage();
stage.setScene(new Scene(vBox));
stage.show();
}
private void setNewAccountBalanceLabel(){
balanceLabel.setText("Balance:"+accountBalance);
}
private void depositAction(){
getDepositAmount();
setNewAccountBalanceLabel();
}
private void getDepositAmount(){
Stage stage = new Stage();
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);
Label depositAmountLabel = new Label("0.00");
TextField depositAmountTextField = new TextField();
depositAmountTextField.setPromptText("Only Numbers");
depositAmountTextField.setOnKeyReleased(keyEvent-> depositAmountLabel.setText(depositAmountTextField.getText()));
Button submitButton = new Button("Submit");
submitButton.setOnMouseClicked(event -> {
double depositAmount = Double.parseDouble(depositAmountLabel.getText());
accountBalance = accountBalance + depositAmount;
stage.close();
});
vBox.getChildren().addAll(depositAmountLabel, depositAmountTextField, submitButton);
stage.setScene(new Scene(vBox));
stage.showAndWait();
}
public static void main(String[] args) { launch(args); }
}