Сохранить разные переменные из диалогового окна ввода - PullRequest
0 голосов
/ 04 марта 2019

Я новичок в программировании и сейчас пытаюсь решить эту программу.Должен быть диалог ввода, в котором пользователь может писать разные цифры, пока пользователь не нажмет кнопку «отмена».

Я использовал цикл do-while, чтобы диалоговое окно ввода появлялось каждый раз, когда пользователь нажимает ОК, но как сохранить каждое число, которое пишет пользователь?

Когда пользователь нажимает кнопку ОТМЕНА, программа должна показать диалоговое окно с сообщением, в котором должно быть опубликовано самое большое и самое низкое число.Моя текущая программа выглядит так:

public class Övning5komma91 {

  public static void main(String[] args) {
    int knappNr;
    int n;
    String s;
    do {
        s = JOptionPane.showInputDialog("Skriv ett nummer");
        n = Integer.parseInt(s);
    } while (s != null && s.length() > 0);


  }

}

1 Ответ

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

Чтобы сохранить все числа, вам нужно поместить их в структуру данных.Если количество записей неизвестно априори , то использование List<Integer> enteredNums = new ArrayList<>(); и затем if (s != null) { enteredNums.add(Integer.parseInt(s); } позволит вам накопить каждое введенное число.

Затем вы можете обработать введенные числа с помощью:

for (Integer num : enteredNums) {
   ...
}

Редактировать на основе комментария:

У ОП было два вопроса:

  1. как сохранить каждое числочто пишет пользователь?
  2. как диалоговое окно сообщения, в котором должно быть опубликовано наибольшее и наименьшее число.

Теперь логически # 2 можно решить, если один из треков # 1,но в комментарии сбор фактических данных представляется менее важным.

Итак, здесь другой подход.Если основная цель состоит в том, чтобы отследить самое большое и самое маленькое, и накопление всех введенных значений не является обязательным требованием), то создание пары переменных и их условная установка будут работать.После каждой записи обновляйте наименьшую, наибольшую и (здесь, для забавы) общую сумму.

Без структуры данных (например, списка) невозможно достичь # 1, но при условии, что реальное желание# 2, тогда нет необходимости отслеживать все входные данные, только текущий самый маленький и самый большой.

public static void main(String[] args) {
   // the smallest entered number
   int smallest = 0;

   // the largest entered number
   int largest = 0;

   // the total; since lots of ints could overflow an int, use a long; not
   // completely immune to overflow, of course
   long sum = 0L;

   // whether it is the first entered number
   boolean foundOne = false;

   int n;
   String s;
   do {
      // get an input
      s = JOptionPane.showInputDialog("Skriv ett nummer");

      // have to ensure not canceled; as s will be null
      if (s != null) {
        // parse the entered value; note this will throw an exception if
        //   cannot parse     
        n = Integer.parseInt(s);

        // on the first go through, we set unconditionally; also update
        //  the boolean so can indicate if anything was entered
        if (! foundOne) {
          smallest = n;
          largest = n;
          foundOne = true;
        }
        else {
          // set the smallest and the largest entered values
          //  the Math methods are just easier to read, but could
          //  be done by if statements
          smallest = Math.min(smallest, n);
          largest = Math.max(largest, n);
        }

        // add to the running total
        sum += n;
      }
} while (s != null && s.length() > 0);

// output the smallest, largest, total if anything entered
if (foundOne) {
  // this should be a dialog, rather than just output, but that is left
  //   as an exercise for the reader
  System.out.printf("The smallest value was %d\n", smallest);
  System.out.printf("The largest value was %d\n", largest);
  System.out.printf("The total of all entered values was %d\n", sum);
}
else {
  System.out.println("no values were entered");
}

}

Примечание: не проверено

...