查找数组中的最小值和最大值
Finding a minimum and maximum value in an array
所以我试图找到用户输入的数组的最小值和最大值。
这是我的代码
public static void main(String[] args) {
int[] a = new int[args.length];
for (int i = 0; i < args.length; i++) {
a[i] = Integer.parseInt(args[i]);
int max = a[0];
for (int j = 1; j < args.length; j++) {
if (a[j] > max) {
max = a[j];
}
}
System.out.println("the maximum value of the array is " + max);
}
}
但我得到的输出是我输入的每个数字。我的错误是什么?
让我们来看看这个过程。因为这是一个 int 数组,所以值被初始化为 0
。在第一个 for 循环中,我们将第一个 int 分配给 a[0]
。然后在第二个 for 循环中,我们检查数组中的每个值是否最大(因此检查第一个值是否为零)然后退出嵌套的 for 循环并打印语句(值为 a[0]
,如果它是正数)。
现在我们进行外循环的第二个循环,如果这个值再次变大,将打印这个值,否则将重新打印第一个值(你的数组是按升序排列的吗?)等等对于每个值。
如评论所述,单个循环就足够了,并确保您的 print 语句在外部 for 循环之外
希望对您有所帮助
你只需要一个循环来检查数组。
下面是一个例子
int[] arr = {2, 3, 1, 6, 4, 7, 8, 5};
int max = arr[0];
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
在搜索更多值之前,您没有完全填充数组。你不应该向前寻找。此外,在确定 min
和 max
之前不应打印。如果你用的是Java 8+,这个问题就比较容易解决;将 args 映射到 int(s) 并获取摘要统计信息。喜欢,
IntSummaryStatistics stats = Stream.of(args).mapToInt(Integer::parseInt)
.summaryStatistics();
System.out.printf("The minimum value is %d%n", stats.getMin());
System.out.printf("The maximum value is %d%n", stats.getMax());
或修复当前代码,在循环外声明min
和max
。在每个值上更新它们。然后显示结果。喜欢,
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
int[] a = new int[args.length];
for (int i = 0; i < args.length; i++) {
a[i] = Integer.parseInt(args[i]);
max = Math.max(a[i], max);
min = Math.min(a[i], min);
}
System.out.printf("The minimum value is %d%n", min);
System.out.printf("The maximum value is %d%n", max);
你根本不需要循环,试试 Streams:
int[] a = { 1, 2, 3, 4, 5 };
int max = Arrays.stream(a).max().getAsInt();
int min = Arrays.stream(a).min().getAsInt();
System.out.println("max value is: " + max);
System.out.println("min value is: " + min);
输出为:
max value is: 5
min value is: 1
所以我试图找到用户输入的数组的最小值和最大值。
这是我的代码
public static void main(String[] args) {
int[] a = new int[args.length];
for (int i = 0; i < args.length; i++) {
a[i] = Integer.parseInt(args[i]);
int max = a[0];
for (int j = 1; j < args.length; j++) {
if (a[j] > max) {
max = a[j];
}
}
System.out.println("the maximum value of the array is " + max);
}
}
但我得到的输出是我输入的每个数字。我的错误是什么?
让我们来看看这个过程。因为这是一个 int 数组,所以值被初始化为 0
。在第一个 for 循环中,我们将第一个 int 分配给 a[0]
。然后在第二个 for 循环中,我们检查数组中的每个值是否最大(因此检查第一个值是否为零)然后退出嵌套的 for 循环并打印语句(值为 a[0]
,如果它是正数)。
现在我们进行外循环的第二个循环,如果这个值再次变大,将打印这个值,否则将重新打印第一个值(你的数组是按升序排列的吗?)等等对于每个值。
如评论所述,单个循环就足够了,并确保您的 print 语句在外部 for 循环之外
希望对您有所帮助
你只需要一个循环来检查数组。
下面是一个例子
int[] arr = {2, 3, 1, 6, 4, 7, 8, 5};
int max = arr[0];
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
在搜索更多值之前,您没有完全填充数组。你不应该向前寻找。此外,在确定 min
和 max
之前不应打印。如果你用的是Java 8+,这个问题就比较容易解决;将 args 映射到 int(s) 并获取摘要统计信息。喜欢,
IntSummaryStatistics stats = Stream.of(args).mapToInt(Integer::parseInt)
.summaryStatistics();
System.out.printf("The minimum value is %d%n", stats.getMin());
System.out.printf("The maximum value is %d%n", stats.getMax());
或修复当前代码,在循环外声明min
和max
。在每个值上更新它们。然后显示结果。喜欢,
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
int[] a = new int[args.length];
for (int i = 0; i < args.length; i++) {
a[i] = Integer.parseInt(args[i]);
max = Math.max(a[i], max);
min = Math.min(a[i], min);
}
System.out.printf("The minimum value is %d%n", min);
System.out.printf("The maximum value is %d%n", max);
你根本不需要循环,试试 Streams:
int[] a = { 1, 2, 3, 4, 5 };
int max = Arrays.stream(a).max().getAsInt();
int min = Arrays.stream(a).min().getAsInt();
System.out.println("max value is: " + max);
System.out.println("min value is: " + min);
输出为:
max value is: 5
min value is: 1