Как я могу сделать цикл в операторе catch? - PullRequest
0 голосов
/ 21 октября 2018

Я делаю кассовый аппарат с «другой» опцией, которая позволяет пользователю добавлять сумму через пользовательский ввод.Я сделал это с помощью JOptionPane, код «другой» кнопки выглядит следующим образом:

private void btnOverigActionPerformed(java.awt.event.ActionEvent evt) {                                          
    String prijs  = JOptionPane.showInputDialog(this, "Vul een bedrag in");
    try {
        double overigePrijs = Double.parseDouble(prijs);
        if (overigePrijs > 0){
            aantalProducten[6]++;
            totaalPerProduct[6] += overigePrijs;
        }
        huidigePrijsDisplay();
    }

    catch (Exception letter){
        while (true){
        prijs = JOptionPane.showInputDialog(this, "Vul a.u.b. alleen cijfers in.");
        }       
}                         

Этот цикл while не закроет панель JOptionPane, даже при вводе чисел, как мне сделать это правильно?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Я предлагаю вам другой подход в вашем коде:

  String prijs = "";
  double overigePrijs = -1;
  while (true) {
     prijs = JOptionPane.showInputDialog(null, "Vul een bedrag in");
     if (prijs != null) { // if user cancel the return will be null
        try {
           overigePrijs = Double.parseDouble(prijs);
           break; // Exits the loop because you have a valid number
        } catch (NumberFormatException ex) {
           // Do nothing
        }
     } else {
        // You can cancel here
     }
     // You can send a message to the user here about the invalid input
  }

  if (overigePrijs > 0) {
     aantalProducten[6]++;
     totaalPerProduct[6] += overigePrijs;
  }
  huidigePrijsDisplay();

Этот код будет повторяться до тех пор, пока пользователь не введет действительное число, а затем вы сможете использовать его после цикла while.Может потребоваться некоторое улучшение, такое как логика отмены или изменение сообщения во второй раз, но основная идея заключается в следующем.

0 голосов
/ 21 октября 2018

Вопрос сам не понятен.Что я предполагаю, что если часть try работает не так, как вы хотите, то JOptionPane должен снова открыться, и пользователю нужно будет сделать это снова.Если это так, вы можете сделать следующее:

Создать метод:

private void doTheTask(){
String prijs  = JOptionPane.showInputDialog(this, "Vul een bedrag in");
  try{
  //your task here.
}
catch (Exception letter){
  //Call the method again.
  doTheTask();
}
}

И вызвать метод внутри вашего действия:

private void btnOverigActionPerformed(java.awt.event.ActionEvent evt){
    doTheTask();
}
...