Quiero hacer una media aritmética para la primera mitad y luego para la segunda mitad de la matriz

Hice la media aritmética para toda la matriz ordenada, pero ahora quiero hacer la media aritmética para la primera mitad ordenada y la segunda mitad ordenada de la matriz.

Ej: Mi matriz es: 77, 99, 44, 55, 22, 88, 11, 00, 66, 33. Mi código hace que el orden sea en primer lugar.

El resultado del programa es: 00 11 22 33 44 55 66 77 88 99.

Ahora quiero hacer la media para la primera mitad: 00 11 22 33 44 e imprimirla.

Entonces quiero hacer la media para la segunda mitad: 55 66 77 88 99 e imprimirla.

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("");
}
}
Respuesta 1

Solo tome la suma de la mitad de la matriz. Dé un elemento más a su segunda o primera mitad en caso de que el tamaño de su matriz sea impar.

    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("");
    }
Respuesta: 2

Para calcular la media de 9, 2 y 7, primero debe sumarlos todos, lo que equivale a 18 y luego dividirlos por cuántos hay, entonces 18/3, que es 6.

Aunque tendrá que tener en cuenta la posibilidad de una lista impar: si hay una cantidad impar de elementos, digamos, por ejemplo, 1, 2, 3, el punto medio de 3 es 1,5, y si está iterando a través de índices, la variable iterativa contará el punto medio como 1. Entonces es un poco complicado, no estoy seguro de lo que te gustaría hacer.

Sin embargo, considere el siguiente código: hace exactamente lo que desea, pero con tamaños de lista impares, solo se dividirá por un valor decimal

        LinkedList<Integer> numbers = new LinkedList<>();
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);
        numbers.add(40);        

        int size = numbers.size();

        int iterativeHalf = size / 2;
        float meanHalf = (float) size / 2;

        float lowerMean = 0;
        float upperMean = 0;
        for (int i = 0; i < size; i++) {
            int realRef = i + 1;
            Integer value = numbers.get(i);

            if (realRef > iterativeHalf) { //Should be calculating upper mean
                if (upperMean == 0) { //if lowerMean is just a running total, not divided yet to get the mean
                    System.out.println("the lower mean for numbers is " + lowerMean + " / " + meanHalf);
                    lowerMean = (lowerMean) / meanHalf; //add last value + divide to set it to the mean
                }

                System.out.println("upper mean = " + upperMean + " + " + value + " = " + (upperMean + value));
                upperMean = upperMean + value; //keep the upper values up total going

            } else {
                System.out.println("lower mean = " + lowerMean + " + " + value + " = " + (lowerMean + value));
                lowerMean = lowerMean + value; //keep adding the lower halfs values up
            }
        }
        //When it breaks, must divide upperMean by size to get mean
        System.out.println("the upper mean for numbers is " + upperMean + " / " + meanHalf);
        upperMean = (upperMean) / meanHalf;
        System.out.println(" ");
        System.out.println("FINAL lower mean = " + lowerMean);
        System.out.println("FINAL upper mean = " + upperMean);



Salida es:

lower mean = 0.0 + 10 = 10.0
lower mean = 10.0 + 20 = 30.0
the lower mean for numbers is 30.0 / 2.0
upper mean = 0.0 + 30 = 30.0
upper mean = 30.0 + 40 = 70.0
the upper mean for numbers is 70.0 / 2.0

FINAL upper mean = 35.0
FINAL lower mean = 15.0


Esto, para un [10, 20, 30, 40] producirá la salida mostrada arriba pero esencialmente (10 + 20) / 2 como la media más baja y (30 + 40) / 2 para la media más alta.

Para [10, 20, 30, 40, 50] producirá (10 + 20) / 2.5 la media inferior y (30 + 40 + 50) /2.5 para la media superior

Respuesta: 3

Aquí hay un método particular que he escrito: clase A {Private ArrayList estática <ArrayList <Integer>> inputTerms = new ArrayList <ArrayList <Integer> (); vacío estático público ...

Estoy desarrollando una apariencia con dos temas. El problema es: quiero poder cambiar dinámicamente entre los dos temas (significa cambiar los temas después del inicio). Pero los temas tienen dos ...

Pensé que el objetivo de upsert era reemplazar un documento que ya existe. Si no creo ningún campo como único, simplemente inserta 2 documentos separados. Si hago un campo único como ...

He escrito un programa que realiza una búsqueda de la palabra hindi dada en la base de datos mysql y recupera su nombre correspondiente en inglés que se almacena en la base de datos. Funciona bien cuando doy ...