有 Java 编程相关的问题?

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

java如何使用单个for循环执行多个数组操作?

所以我被指示做下面的事情,我可以让它运行得很好,但是它只需要一个for循环,我就是不知道怎么做。任何帮助都将不胜感激。这就是我想到的。我需要能够得到总数,平均数,最高数和最低数与一个循环

public static void arrayTotalAndAverage(int[] array) {

        int[] numbers = { 10, 4, 13, 29, 57, 92, 114, 212, 3, 88, 36, 101, 77, 42, 209 };

        int total = 0;
        double average = 0;
        int highest = numbers[0];
        int lowest = numbers[0];

        for (int i = 0; i < numbers.length; i++) {
            total += numbers[i];
            average = total / numbers.length;
        }

        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] > highest)
                highest = numbers[i];
            if (numbers[i] < lowest)
                lowest = numbers[i];
        }

        System.out.println("Total");
        System.out.println(total);

        System.out.println("Average");
        System.out.println(average);

        System.out.println("Highest number");
        System.out.println(highest);

        System.out.println("Lowest number");
        System.out.println(lowest);

    }

共 (4) 个答案

  1. # 1 楼答案

    你可以像这样在一个循环中完成所有的操作。平均值可以从循环中移出

    int[] numbers = { 10, 4, 13, 29, 57, 92, 114, 212, 3, 88, 36, 101, 77, 42, 209 };
    
    int total = 0;
    double average = 0;
    int highest = Integer.MIN_VALUE;
    int lowest = Integer.MAX_VALUE;
    
    for (int i = 0; i < numbers.length; i++) {
        total += numbers[i];
        if (numbers[i] > highest)
            highest = numbers[i];
        if (numbers[i] < lowest)
            lowest = numbers[i];
    }
    average = total / numbers.length;
    
    System.out.println("Total");
    System.out.println(total);
    
    System.out.println("Average");
    System.out.println(average);
    
    System.out.println("Highest number");
    System.out.println(highest);
    
    System.out.println("Lowest number");
    System.out.println(lowest);
    
    }
    
  2. # 2 楼答案

    只需将第二个循环与第一个循环合并即可。请注意,应该只在循环结束时计算平均值,并且必须首先将其中一个操作数转换为double,以避免整数除法的截断

    int total = 0;
    double average = 0;
    int highest = numbers[0];
    int lowest = numbers[0];
    
    for (int i = 0; i < numbers.length; i++) {
     total += numbers[i];
     if (numbers[i] > highest)
      highest = numbers[i];
     if (numbers[i] < lowest)
      lowest = numbers[i];
    }
    average = (double) total / numbers.length;
    

    Demo

    输出:

    Total
    1087
    Average
    72.46666666666667
    Highest number
    212
    Lowest number
    3
    
  3. # 3 楼答案

    您可以通过StreamAPI完成所有这些操作

     int[] numbers = {10, 4, 13, 29, 57, 92, 114, 212, 3, 88, 36, 101, 77, 42, 209};
        IntSummaryStatistics statistics = IntStream.of(numbers).summaryStatistics();
        
        System.out.println("total: " + statistics.getSum());
        System.out.println("average: " + statistics.getAverage());
        System.out.println("minimum: " + statistics.getMin());
        System.out.println("maximum: " + statistics.getMax());
    
  4. # 4 楼答案

    实际上,在这里进行操作的最有效方法可能是只迭代数组一次,然后跟踪最小值、最大值、平均值和总值的状态:

    int[] numbers = { 10, 4, 13, 29, 57, 92, 114, 212, 3, 88, 36, 101, 77, 42, 209 };
    int min = Integer.MAX_VALUE;
    int max = Integer.MIN_VALUE;
    int total = 0;
    double average = 0;
    
    for (int i=0; i < numbers.length; ++i) {
        total += numbers[i];
        if (numbers[i] > max) {
            max = numbers[i];
        }
        if (numbers[i] < min) {
            min = numbers[i];
        }
    }
    
    average = 1.0d * total / numbers.length;
    
    System.out.println("total: " + total);
    System.out.println("average: " + average);
    System.out.println("minimum: " + min);
    System.out.println("maximum: " + max);
    

    这张照片是:

    total: 1087
    average: 72.46666666666667
    minimum: 3
    maximum: 212