java 查找数组中的最小值和最大值

5w9g7ksd  于 2023-03-21  发布在  Java
关注(0)|答案(5)|浏览(395)

所以我试图找到一个用户输入的数组的最小值和最大值。
这是我的密码

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);
    }
}

但是我得到的输出是我输入的每一个数字,我错在哪里?

amrnrhlw

amrnrhlw1#

让我们来看看这个过程。因为这是一个int数组,所以值被初始化为0。在第一个for循环中,我们将第一个int赋值给a[0]。然后在第二个for循环中,我们检查数组中的每个值是否是最大值(因此检查第一个值是否为零),然后退出嵌套的for循环并打印语句(如果为正,则使用a[0]的值)。
现在我们经历了外部循环的第二个循环,如果这个值再次变大,这个值将被打印出来,否则第一个值将被重新打印出来(你的数组是按升序排列的吗?)。
如前所述,一个循环就足够了,并确保print语句在外部for循环之外
希望这能帮上忙

2vuwiymt

2vuwiymt2#

你只需要一个循环来检查数组。
下面是一个示例

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];
    }
}
tyu7yeag

tyu7yeag3#

你根本不需要循环,试试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
amrnrhlw

amrnrhlw4#

在你搜索更多的值之前,你没有完全填充数组。你不应该向前搜索。而且,你不应该在你确定minmax之后才打印。如果你使用Java 8+,这个问题就容易解决了;将argsMap到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());

修复当前代码,在循环外声明minmax。在每个值上更新它们。然后显示结果。例如,

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);
bzzcjhmw

bzzcjhmw5#

int value = {5, 1, 6, 9, 10};
ArrayList<Integer> listValues = Arrays.stream(value).boxed().collect(Collectors.toCollection(ArrayList::new));

// Collections class 'min' and 'max' method
int min = Collections.min(listValues);
int max = Collections.max(listValues);
          (OR) 
// Java8
int min = listVlaues.stream().min(Integer::compare).get();
int max = listValues.stream().max(Integer::compare).get();

相关问题