(Java) Как отслеживать числа, введенные пользователем для определения минимума и максимума - PullRequest
0 голосов
/ 13 октября 2019

У меня есть домашнее задание, в котором меня просят использовать диалоговое окно ввода, чтобы попросить конечного пользователя ввести число, разобрать эту строку в int, а затем использовать диалоговое окно подтверждения, чтобы спросить, хочет ли пользователь ввести другой номер. ,Если они нажимают «да», программа зацикливается, и как только они нажимают «нет», она берет все введенные числа и определяет минимальное и максимальное значения. Как отслеживать все введенные числа, не объявляя несколько переменных для их хранения (поскольку пользователь может технически ввести бесконечное количество чисел)?

Я очень новичок в программировании. Я искал свой учебник и просмотрел Переполнение стека, чтобы найти свою конкретную проблему и ничего не нашел, по крайней мере, в Java.

    {
        int yes = JOptionPane.YES_OPTION;

        do
        {
            String numberstring = JOptionPane.showInputDialog("Enter a "
                    + "number: ");
            int number = Integer.parseInt(numberstring);

            yes = JOptionPane.showConfirmDialog(null, "Do you want to enter"
                    + " another number?", "MinMax", JOptionPane.YES_OPTION);
        }
        while (yes == JOptionPane.YES_OPTION);

        JOptionPane.showMessageDialog(null, "The min is " + min + " and the"
                + " max is " + max);
    }

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

Ответы [ 3 ]

1 голос
/ 13 октября 2019

Вы можете сделать это следующим образом:

{
    int yes = JOptionPane.YES_OPTION;
    List<Integer> list=new ArrayList<Integer>();

    do
    {
        String numberstring = JOptionPane.showInputDialog("Enter a "
                + "number: ");
        int number = Integer.parseInt(numberstring);

        list.add(number);

        yes = JOptionPane.showConfirmDialog(null, "Do you want to enter"
                + " another number?", "MinMax", JOptionPane.YES_OPTION);
    }
    while (yes == JOptionPane.YES_OPTION);

    int min = list.get(0), max = list.get(0);
    for (int i = 1; i < list.size(); i++) {
        if (min > list.get(i))
            min = list.get(i);
        if (max < list.get(i))
            max = list.get(i);
    }

    JOptionPane.showMessageDialog(null, "The min is " + min + " and the"
            + " max is " + max);
}
0 голосов
/ 13 октября 2019

Если вы действительно хотите сохранить все номера, вы можете создать список и продолжать добавлять к нему введенные номера:

List<Integer> allNumbers = new LinkedList<>();
do {
    String numberstring = JOptionPane.showInputDialog("Enter a number: ");
    int number = Integer.parseInt(numberstring);
    allNumbers.add(number);
    yes = JOptionPane.showConfirmDialog
              (null, 
               "Do you want to enter another number?",
               "MinMax",
               JOptionPane.YES_OPTION);
} while (yes == JOptionPane.YES_OPTION);

Однако следует помнить, что это оченьнеэффективный подход - вам не нужны все числа, только минимум и максимум, которые вы можете вычислить по ходу, и избегайте хранения всех этих чисел:

int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;

do {
    String numberstring = JOptionPane.showInputDialog("Enter a number: ");
    int number = Integer.parseInt(numberstring);
    max = Math.max(max, number);
    min = Math.min(min, number);
    yes = JOptionPane.showConfirmDialog
              (null, 
               "Do you want to enter another number?",
               "MinMax",
               JOptionPane.YES_OPTION);
} while (yes == JOptionPane.YES_OPTION);
0 голосов
/ 13 октября 2019

Создайте минимальные и максимальные переменные и обновляйте их каждый раз, когда пользователь вводит новый номер:

int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
...
int number = Integer.parseInt(numberstring);
min = Math.min(number, min);
max = Math.max(number, max);
...