Мне нужно мнение о том, как завершить операцию (парсинг пустой строки для удвоения) - PullRequest
0 голосов
/ 14 марта 2019

Я пишу код банкомата, но я столкнулся с простой проблемой (надеюсь), когда я нажимаю на кнопку депозита, появляется новое окно с кнопками (от 0 до 9), которые пользователь вводит желаемую сумму, затем, нажав «отправить», текст в метке анализируется на удвоение, а затем возвращается к методу депозита, который увеличивает баланс (удваивает) на возвращаемую сумму. Проблема в том, что когда пользователь открывает всплывающее окно с депозитом, а затем закрывает его, нажимая кнопку X, строка возвращает нулевой символ, который выдает мне ошибку (NumberFormatException: пустая строка), потому что вы не можете разобрать нулевое значение как удвоенное.

Я попробовал оператор if, если строка имеет значение null, пусть она будет «0», но затем в истории транзакций (массив строк) хранится «Deposit: 0 $», что не соответствует действительности, потому что он не сделал Нажмите кнопку «Отправить» (это нелогично) Поэтому мне нужно знать, как, если строка имеет значение null, возможно, завершить операцию и вернуться к предыдущей сцене, не возвращая никакого значения в метод deposit.

Вот код возврата

String value = labelNum.getText();
if(value == null || value.isEmpty()) { value = ""; }
return Double.valueOf(value);

и это метод, к которому возвращается:

  public void setDeposit(double deposit) { balance = balance + deposit; }

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Я бы порекомендовал что-то в этом духе, предполагая, что у вас есть правильное регулярное выражение, отфильтровывающее символы вычитания букв, но то, как вы это произносите, звучит так, что это не должно быть проблемой, потому что я кодировал только цифры 1-9так что вы получите представление о том, что происходит, тогда вы не пытаетесь вернуть ноль или 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); }
}
0 голосов
/ 14 марта 2019

Используя @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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...