【问题标题】:Save array result from a for loop to a variable将 for 循环中的数组结果保存到变量中
【发布时间】:2013-12-16 04:31:32
【问题描述】:

我有一个任务,我应该在一个整数数组中有 6 个元素,并且程序应该找到数组中的最高和最低元素并省略这两个元素并找到其余四个元素的平均值。到目前为止,我的程序能够找到该数组中的最低和最高数字并能够省略它,但是,我似乎无法将循环中的这些结果保存到变量中,因此我可以开始计算我的平均值。代码是

int bucky[] = { 4, 6, 8, 19, 199, 400 };
int hello = 0;
int max = 0;

for (int i = 0; i < bucky.length; i++) {
    if (bucky[i] > max) {
        max = bucky[i];
    }
}
System.out.println("Max number is " + max);

int min = 0;
int j = 1;
for (int i = 0; i < bucky.length; i++) {
    if (bucky[i] < bucky[j]) {
        min = bucky[i];
        j = i;
    }
}
System.out.println("min number is " + min);

System.out.print("{");
for (int i = 0; i < bucky.length; i++) {
    if (bucky[i] != max) {
        if (bucky[i] != min) {
            System.out.print(" " + bucky[i]);
        }
    }
}
System.out.print("}");

到目前为止,它打印出{6 8 19 199}。我希望能够将它们保存在一个变量中并计算平均值。任何帮助将不胜感激。

【问题讨论】:

  • 你不能对数组求和(当你寻找最小值/最大值时),从总和中减去最小值/最大值,然后从那里计算平均值?

标签: java arrays average


【解决方案1】:

这是一个简单的程序,可以实现您的目标。

如果所有元素都具有相同的值会发生什么?

int[] input = {0,1,2,3,4,5};

int max = input[0];
int min = input[0];
int sum = 0;

for(int i : input){
    sum += i;
    if(i < min){
        min = i;
    }else if(i > max){
        max = i;
    }
}

System.out.println("sum for input is : " + sum);
System.out.println("highest value element is : " + max);
System.out.println("lowest value element is : " + min);
System.out.println("sum excluding extreme elements is : " + (sum - min -max));

// have cast the result as a float as i dont know if average should be truncated or not
System.out.println("average excluding extreme elements is : " + ((float)(sum - min -max)/(input.length-2)));

【讨论】:

    【解决方案2】:
    public static void main(String args []){
        int bucky [] = new int [] {4, 6, 8, 19, 199, 400};
        int max = bucky[0];
        int min = bucky[0];
        int sum = 0;
        for(int i = 0; i<bucky.length; i++){
    
            if(min > bucky[i]){
                min = bucky[i];
            }
            else if(max < bucky[i]){
                max = bucky[i];
            }
            sum += bucky[i];
        }
        sum -= (min + max);
        System.out.println("Max is " + max);
        System.out.println("Min is " + min);
        System.out.println("Sum is " + sum);
        System.out.println("Average is " + sum/(bucky.length-2));
    
    }
    

    【讨论】:

      【解决方案3】:

      可以使用Java中的数组开发小程序如下,它最初将数组的第一个元素存储在minmaxsum中,然后从第一个元素开始遍历数组并确定@987654324 @ 和max 通过将它们与数组的input[i] 指向的当前元素进行比较来取值元素。还要每次将input[i] 添加到sum 变量以获取所有元素的总和。在计算了minmaxsum 值元素之后;通过从sum 中减去minmax 来计算avg,然后将结果值除以length - 2

      class ComputeAvg
      {
        public static void main (String[] a)
        {
          int[] input = {10,11,12,13,14,15};
          int min, max, sum, avg;
          min = max = sum = input[0];
          int length = input.length;
          for (int i = 1; i < length; i++)
          {
            if (min > input[i])
              min = input[i];
            else if (max < input[i])
              max =  input[i];
            sum += input[i];
          }
          avg = (sum - min - max)/(length - 2);
      
          System.out.println("sum for input is : " + sum);
          System.out.println("highest value element is : " + max);
          System.out.println("lowest value element is : " + min);
          System.out.println("sum excluding min and max value elements is : " + (sum - min - max));
          System.out.println("Average after excluding min and max value elements is : " + avg);
        }
      }
      OUTPUT
      ======
      sum for input is : 75
      highest value element is : 15
      lowest value element is : 10
      sum excluding min and max value elements is : 50
      Average after excluding min and max value elements is : 12
      

      【讨论】:

        【解决方案4】:

        你有 90% 在那里。您只需要朝正确的方向轻推即可。

        您已经知道如何使用此语句从最高和最低筛选结果(重写以压缩嵌套的ifs):

        for(int i=0;i<bucky.length; i++){
            if(bucky[i] != max && bucky[i] !=min) {
               // implementation
            }
        }
        

        顺便说一句,它可以改写成这样,感谢De Morgan's Law。这对您来说可能更直接:“如果bucky[i] 中的值既不是最大值也不是最小值......”

        for(int i=0;i<bucky.length; i++){
            if(!(bucky[i] == max || bucky[i] ==min)) {
               // implementation
            }
        }
        

        那是最困难的部分。你现在需要什么:

        • 一个计数器告诉您实际添加了多少值。像adjustedTotal 这样的东西。如果数字不是最小值或最大值,您只会添加到此计数器。

        • 一个简单的sum 变量,经过适当初始化,从bucky[i] 中获取值,使得bucky[i] != max &amp;&amp; bucky[i] != min

        【讨论】:

        • 问题是,如果数组中有两倍的最小值或两倍的最大值(如 {1,1,4,6,7,9,9},您将同时删除它们.
        【解决方案5】:
         int sum=0;
         for (int i=0 ;i< arr.length;i++) {
           if(arr[i]!=max && arr[i]!=min) {
             sum=sum+arr[i];
          } 
        }
        
        int average=sum/(arr.length-2)
        

        【讨论】:

        • 问题是如果数组中有两倍的最小值或两倍的最大值(如 {1,1,4,6,7,9,9}),您将删除它们两者(但仍除以 lenght-2)。而且您的代码没有解决找到最小值/最大值的问题。
        【解决方案6】:

        您可以像上面提到的 Makoto 一样定义一个名为 sum 的变量。

        另外,我想指出您的计算 min 的代码有问题。

        这是一个例子,

        假设int[]数组如下:

        int bucky[] = { 6, 4, 8, 19, 400,199 };
        

        在下面使用您的代码:

            int min = 0;
            int j = 1;
            for (int i = 0; i < bucky.length; i++) {
                if (bucky[i] < bucky[j]) {
                    min = bucky[i];
                    j = i;
                }
            }
            System.out.println("min number is " + min);
        

        min 的值是多少?

        它将是 0。这是不正确的。

        You can first specify the first element in array as min, and then compare it with remaining values. If any value is smaller than min, then change the value for min.

        这是一个例子:

        int min = bucky[0];
            //int j = 1;
            for (int i = 1; i < bucky.length; i++) {
                if (bucky[i] < min) {
                    min = bucky[i];
                }
            }
            System.out.println("min number is " + min);
        

        做出一些改变并继续前进。 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-03
          • 2016-07-13
          相关资源
          最近更新 更多