Найдите 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 и даже не компилируется.
теперь у вас есть несколько вариантов:
- либо сохраните все числа в массиве, а затем пересечь это для min и max элементы с помощью некоторого метода утилиты.
- установите некоторое минимальное и максимальное значение и запустите цикл, чтобы получить все элементы, а также отслеживать 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 int
s не может представлять ±∞. Использовать Integer.MIN_VALUE
и Integer.MAX_VALUE
вместо.
вы можете сделать это, просто поставив условие if else внутри цикла... как
- возьмите 2 переменные на внешнем цикле один для максимального значения и другой для минимального хранилища значений.
- внутри петли назначьте входной номер min и max в первый раз.
- после этого comare следующий номер с этим и переназначить значения.
- В конце цикла вы найдете как min, так и max.