使用for循环在数组中查找最大值和最小值?
Finding Maximum & Minimum in an array using for loops?
正在尝试查找 java 中随机生成的数组的 min/max。我的代码正在寻找最大值,但是我不确定为什么当我尝试 运行 时,最小值每次都变成 0.0。
public static void main(String[] args) {
double array1[] = new double [10];
int n = array1.length;
double max = array1[0];
double min = array1[1];
System.out.println("Array: ");
for (int i=0; i<n; i++) {
array1[i] = Math.floor((Math.random() * 100) + 1);
System.out.print(array1[i]+ " | " );
if (array1[i] > max) {
max = array1[i];
}
if (min > array1[i]) {
min = array1[i];
}
}
}
据我所知,你得到 0.0 作为最小值的原因是因为它是空数组中元素的默认值,所以当你尝试比较整个随机生成的数组时,最小值仅为 1 , min 变量中的值将永远不会更新。尽管数组中的元素尚未初始化,但您已经将 min 指定为数组的第二个元素。尝试在比较循环之前处理的不同循环中初始化数组,或者将 min 变量分配为随机生成器的最大值,那么它可能 运行 顺利。
for(int i= 0;i<n;i++)
array1[i] = Math.floor((Math.random() * 100) + 1);
max = array[0];
min = array[0];
for(int i = 1;i<n;i++)
{
System.out.print(array1[i]+ " | " );
//continue ...
}
或者这个
min = 100;
max = 1;
for(int i = 0; i<n;i++)
{
//continue ...
}
要么在初始化max和min之前做数组赋值;或者如果你想避免那个额外的循环,只需将 min 初始化为 Double.MAX_VALUE 因为将它分配给 0.0 (双数组中元素的默认初始值)将不满足 if 条件 - 任何大于或的随机数等于 1 总是大于 0。
一个相当标准的方法是用 "worst case" 个值初始化 min/max 个变量:
double max = Double.MIN_VALUE;
double min = Double.MAX_VALUE;
这也将解决您的问题,因为您不会生成任何低至 0.0
的值,这是您访问它以将值赋给 min
时数组所持有的内容和 max
.
另外,在你的循环中你可以简化为:
max = Math.max(max, array[i]);
min = Math.min(min, array[i]);
// using forloop
// max number in arrry
const arr = [2, 3, 5, 10, 8, 3];
let max = 0;
for (i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
console.log(max);
// max number in arrry
let min = 100;
for (i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
console.log(min);
//find maximum and min number in array using funtion
const maxArrayNum = (arr) => {
let max = Math.max(...arr);
return max;
};
const minArrayNum = (arr) => {
let min = Math.min(...arr);
return min;
};
const maxNum = maxArrayNum([3, 4, 2, 1]);
console.log(maxNum);
const minNum = minArrayNum([3, 4, 2, 1]);
console.log(minNum);
正在尝试查找 java 中随机生成的数组的 min/max。我的代码正在寻找最大值,但是我不确定为什么当我尝试 运行 时,最小值每次都变成 0.0。
public static void main(String[] args) {
double array1[] = new double [10];
int n = array1.length;
double max = array1[0];
double min = array1[1];
System.out.println("Array: ");
for (int i=0; i<n; i++) {
array1[i] = Math.floor((Math.random() * 100) + 1);
System.out.print(array1[i]+ " | " );
if (array1[i] > max) {
max = array1[i];
}
if (min > array1[i]) {
min = array1[i];
}
}
}
据我所知,你得到 0.0 作为最小值的原因是因为它是空数组中元素的默认值,所以当你尝试比较整个随机生成的数组时,最小值仅为 1 , min 变量中的值将永远不会更新。尽管数组中的元素尚未初始化,但您已经将 min 指定为数组的第二个元素。尝试在比较循环之前处理的不同循环中初始化数组,或者将 min 变量分配为随机生成器的最大值,那么它可能 运行 顺利。
for(int i= 0;i<n;i++)
array1[i] = Math.floor((Math.random() * 100) + 1);
max = array[0];
min = array[0];
for(int i = 1;i<n;i++)
{
System.out.print(array1[i]+ " | " );
//continue ...
}
或者这个
min = 100;
max = 1;
for(int i = 0; i<n;i++)
{
//continue ...
}
要么在初始化max和min之前做数组赋值;或者如果你想避免那个额外的循环,只需将 min 初始化为 Double.MAX_VALUE 因为将它分配给 0.0 (双数组中元素的默认初始值)将不满足 if 条件 - 任何大于或的随机数等于 1 总是大于 0。
一个相当标准的方法是用 "worst case" 个值初始化 min/max 个变量:
double max = Double.MIN_VALUE;
double min = Double.MAX_VALUE;
这也将解决您的问题,因为您不会生成任何低至 0.0
的值,这是您访问它以将值赋给 min
时数组所持有的内容和 max
.
另外,在你的循环中你可以简化为:
max = Math.max(max, array[i]);
min = Math.min(min, array[i]);
// using forloop
// max number in arrry
const arr = [2, 3, 5, 10, 8, 3];
let max = 0;
for (i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
console.log(max);
// max number in arrry
let min = 100;
for (i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
console.log(min);
//find maximum and min number in array using funtion
const maxArrayNum = (arr) => {
let max = Math.max(...arr);
return max;
};
const minArrayNum = (arr) => {
let min = Math.min(...arr);
return min;
};
const maxNum = maxArrayNum([3, 4, 2, 1]);
console.log(maxNum);
const minNum = minArrayNum([3, 4, 2, 1]);
console.log(minNum);