Try & Catch в двойном массиве не работает, как я ожидал

Я пытаюсь выполнить попытку перехвата пользовательского ввода и поместить пользовательский ввод в массив, если он пройдет проверку, но если я введу недопустимый ввод, он заменит этот индекс на 0 и перейдет к следующему индексу. Я пытаюсь понять, как заставить повторную подсказку работать внутри цикла for, чтобы недопустимое значение в этом конкретном индексе было заменено допустимым пользовательским вводом. Порядок значений в массиве не имеет значения. Я пытаюсь сделать это без импорта других библиотек Java!

Буду очень признателен за любую помощь! Я новичок в программировании и Java. Спасибо за ваше время !

public static double[] getAmount()
   {
      int MAX_NUM = 10;
      double[] numArray = new double[MAX_NUM];
      for (int i = 0; i < numArray.length;i++)
      {
         double numInput;
         do
         {
            try
            {
               numInput = Double.parseDouble(JOptionPane.showInputDialog("Enter amounts in $: "));
            }
            catch (NumberFormatException e)
            {
               numInput = MAX_NUM - 11;
            }
            if (numInput < 0 || numInput > 999999)
            {
               JOptionPane.showMessageDialog(null, "Error. Please enter valid amount in dollars");
               numInput = Double.parseDouble(JOptionPane.showInputDialog("Enter amount in $: "));
            }
            else
            {
               numArray[i] = numInput;
            }
          }
          while (numInput < 0 && numInput > 999999);
       }
       return numArray;      
    }

person user12462717    schedule 01.12.2019    source источник
comment
вы должны попробовать цикл while, так как вам нужен контроль над i   -  person Rajat    schedule 01.12.2019


Ответы (2)


Это должно работать:


public static double[] getAmount()
   {
      int MAX_NUM = 10;
      double[] numArray = new double[MAX_NUM];
      for (int i = 0; i < numArray.length;i++)
      {
         double numInput;
         do
         {
            try
            {
               numInput = Double.parseDouble(JOptionPane.showInputDialog("Enter amounts in $: "));
            }
            catch (NumberFormatException e)
            {
               numInput = MAX_NUM - 11;
            }
            if (numInput < 0 || numInput > 999999)
            {

               JOptionPane.showMessageDialog(null, "Error. Please enter valid amount in dollars");
            }
          }
          while (numInput < 0 || numInput > 999999);
          numArray[i] = numInput;
       }
       return numArray;      
    }
person Max Wright    schedule 01.12.2019

person    schedule
comment
Большое спасибо ! Я так застрял на идее использования цикла for. В итоге я удалил оператор после сообщения об ошибке в операторе if, и он работал отлично. Еще раз спасибо! - person user12462717; 01.12.2019