我对整个排序数组作了算术平均值,但现在我想对数组的第一个排序的一半和第二个排序的一半作算术平均值。

例如:我的数组是:77、99、44、55、22、88、11、00、66、33。
我的代码排在首位。

程序的结果是:00 11 22 33 44 55 66 77 88 99。

现在,我想对上半部分进行平均:
00 11 22 33 44并打印。

然后,我想对下半部分进行平均:
55 66 77 88 99并打印。

public class Array {
private double[] a;
private int NrElmts;
public Array(int max)
    { a = new double[max];
        NrElmts = 0;
    }
public void elements(double value)
    { a[NrElmts] = value;
        NrElmts++;
    }
public void print()
    { for(int j=0; j<NrElmts; j++)
        System.out.print(a[j] + " ");
        System.out.println("");
    }
public void selectionSort()
    {
int out, in, min;
for(out=0; out< NrElmts -1; out++)
{ min = out;
for(in=out+1; in< NrElmts; in++)
if(a[in] < a[min] )
min = in;
invertPositions(out, min); }
}
private void invertPositions(int one, int two)
{ double temp = a[one];
a[one] = a[two];
a[two] = temp;
}
public void mean()
{
  int  i;
  double sum = 0;
  for(i = 0; i < NrElmts; i++) {
     sum+=a[i];}
  double medie = sum/NrElmts;
  System.out.format("Mean is: %.1f", mean);
  System.out.println("");
}
}

最佳答案

只取数组的一半。如果数组大小为奇数,则在后半部分或前半部分再增加一个元素。

    public void firstHalfMean(){
        int i;
        double sum = 0;
        int numberOFElements = NrElmts/2;
        for (i = 0; i < NrElmts/2; i++) {   // take sum only till half.
            sum += a[i];
        }
        double mean = sum / numberOFElements;   // sum/half the elements
        System.out.format("Mean is: %.1f", mean);
        System.out.println("");
    }

    public void secondHalfMean(){
        int i;
        double sum = 0;
        int numberOFElements = NrElmts % 2 == 0 ? NrElmts/2 : NrElmts/2 + 1; // If odd, this second array will contain one more element.
        for (i = NrElmts/2; i < NrElmts; i++) {   // take sum for the next half
            sum += a[i];
        }
        double mean = sum / numberOFElements;  // sum/half elements  (half + 1) in case of odd length.
        System.out.format("Mean is: %.1f", mean);
        System.out.println("");
    }

10-01 15:21