有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

所以我试图找到一个由用户放入的数组的最小值和最大值

这是我的密码

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

但我得到的输出是我输入的每一个数字。我犯了什么错


共 (4) 个答案

  1. # 1 楼答案

    让我们来看看这个过程。因为这是一个int数组,所以值被初始化为0。在第一个for循环中,我们将第一个int赋值给a[0]。然后在第二个for循环中,我们检查数组中的每个值是否为最大值(因此根据零负载检查第一个值),然后退出嵌套的for循环并打印语句(如果值为正,则使用a[0]

    现在我们来看看外循环的第二个循环,如果它再次变大,这个值会被打印出来,否则第一个值会被重新打印(你的数组是按升序排列的吗?)对于每个值,依此类推

    如前所述,一个循环就足够了,并确保您的print语句在外部for循环之外

    希望这有帮助

  2. # 2 楼答案

    你根本不需要循环,试试流:

    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
    
  3. # 3 楼答案

    只需要一个循环就可以检查整个数组

    下面是一个例子

    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];
        }
    }
    
  4. # 4 楼答案

    在搜索更多值之前,没有完全填充数组。你不应该向前搜索。此外,在确定minmax之前,不应打印。如果您使用的是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());
    

    修复当前代码,在循环外声明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);