Найдите Max / Min значений в цикле for

Я искал ответы на этот конкретный вопрос, но не смог ничего найти. Мне нужно найти максимум и минимум входных чисел, но значения, которые мне нужны, находятся внутри цикла for, и я не могу понять, как использовать их вне него.

System.out.print("How many numbers do you want to input?");

    int totalNumbers = console.nextInt();

    int minMax = 0;
    for(int i = 1; i <= totalNumbers; i++){
        System.out.print("Number " + i + ": ");
        int inputNumbers = console.nextInt();
    }
    System.out.println();

    int smallest = Math.min(minMax);
    System.out.println("Smallest = " + smallest);
    int largest = Math.max(minMax); 
    System.out.println("Largest = " + largest);

мне не нужен измененный код, просто что-то, что поможет мне на правильном пути.Спасибо!

5 ответов


можете ли вы заметить проблему со следующим циклом?

for(int i = 1; i <= totalNumbers; i++){
        System.out.print("Number " + i + ": ");
        int inputNumbers = console.nextInt();
    }

вы запускаете цикл totalNumbers раз и каждый раз, когда вы создаете новый int С именем inputNumbers и сохраните значение, полученное из консоли. Также где вы меняете значение minMax? Также Math.min(or max) не принимает ни одного paramtere и даже не компилируется.

теперь у вас есть несколько вариантов:

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

Я не пишу никакого решения, поскольку я хочу, чтобы вы попробовали его сами.


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

int[] numbers = new int[totalNumbers];

for (int i = 0; i < totalNumbers; i++) {
    numbers[i] = console.nextInt();
}

//Other Operations

Если я не неправильно понимаю, что вы хотите, не можете ли вы просто поддерживать переменную снаружи цикла for и проверять их?

int minMax = 0;
int smallest = 0;
int largest = 0;

for(int i = 1; i <= totalNumbers; i++){
    System.out.print("Number " + i + ": ");
    int inputNumbers = console.nextInt();
    if(inputNumbers > largest){
        largest = inputNumbers;
    } else if (inputNumbers < smallest){
        smallest = inputNumbers;
   }
}
System.out.println();

System.out.println("Smallest = " + smallest);
System.out.println("Largest = " + largest);

Это самый прямой и логичный способ проверить входные значения и решить, являются ли они наименьшими или наибольшими в настоящее время известными ( Edit: если вы требуются использование Math.minMax)


псевдокод:

smallest := +∞
largest  := -∞

for each number read, n:
    if n > largest:
        largest := n
    if n < smallest:
        smallest := n

print the results

подсказка:

Java ints не может представлять ±∞. Использовать Integer.MIN_VALUE и Integer.MAX_VALUE вместо.


вы можете сделать это, просто поставив условие if else внутри цикла... как

  1. возьмите 2 переменные на внешнем цикле один для максимального значения и другой для минимального хранилища значений.
  2. внутри петли назначьте входной номер min и max в первый раз.
  3. после этого comare следующий номер с этим и переназначить значения.
  4. В конце цикла вы найдете как min, так и max.