getPromedioColumnas(), algun tip ?

Iniciado por rub'n, 5 Diciembre 2016, 19:04 PM

0 Miembros y 1 Visitante están viendo este tema.

rub'n

Ya puedo sacar el promedio de cada fila, pero de cada columna ? linea [75 a 85], tenia años sin hacer esto  :-X ,,,en la linea 38 llamo al metodo getPromedioFila y le paso un array, intente hacer algo parecido con la linea 51 de varias maneras pero me da java.lang.ArrayIndexOutOfBoundsException
Código (java) [Seleccionar]


import java.text.DecimalFormat;

/*
* @Array 2D como promediar cada columna ?
*/
public class Array2Dimensiones implements Mostrar {

private int array[][];
private int array2[][];
private DecimalFormat dosDigi = new DecimalFormat("0.00");

public Array2Dimensiones( String descripcion, int array[][], int array2[][] ) {
print("\""+descripcion+"\"\n");
this.array = array;
this.array2 = array2;
mostrarArray();
}

public void mostrarArray() {
print("Array 2D completo\n");
for( int tmp[] : array) {
for( int tmp2 : tmp ) {
print("{"+tmp2+"}");
}
print("\n");
}

/*
* PROMEDIO DE CADA FILA
*/
print("Promedio de cada fila \n");
for( int f=0; f<array.length; f++ ) {

for( int c=0; c<array.length; c++ ) {
print(""+array[f][c]);
}
double promedio = getPromedioFila( array[f] );
print("\t\t\t\t"+dosDigi.format(promedio)+"\n");
}

/*
* PROMEDIO DE CADA COLUMNA
*/
print("Promedio de cada columna \n");
for( int f=0; f<array.length; f++ ) {
double promedio = 0;

for( int c=0; c<array[f].length; c++ ) {
print(""+array[c][f]);
promedio = getPromedioColumna(array[c]);
}

print("\t\t\t\t"+dosDigi.format(promedio)+"\n");
}
}

/*
* PROMEDIO FILA
*/
public double getPromedioFila( int array[] ) {

int suma = 0;
for( int f=0; f<array.length; f++ ) {
suma += array[f];
}
return (double) suma / array.length;

}

/*
* PROMEDIO COLUMNA
*/
public double getPromedioColumna( int array[] ) {

int suma = 0;
for( int f=0; f<array.length; f++ ) {
for( int c=0; c<array[f]; c++ ) {
suma += array[c];
}
}
return (double) suma / array.length;

}

@Override
public void print( String s ) { System.out.print(s); }
public static void main( String []blablabl) {

int array[][] = {{1,2,3},
               {4,5,6},
                       {7,8,9}};

int array2[][] = {{1,2,3},
        {4},
{5,6,7}};

new Array2Dimensiones("2 tipos de Array 2d e Irregular",array,array2);

}
}


Código (java) [Seleccionar]
"2 tipos de Array 2d e Irregular"
Array 2D completo
{1}{2}{3}
{4}{5}{6}
{7}{8}{9}
Promedio de cada fila
123 2,00
456 5,00
789 8,00
Promedio de cada columna
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at Array2Dimensiones.getPromedioColumna(Array2Dimensiones.java:80)
at Array2Dimensiones.mostrarArray(Array2Dimensiones.java:52)
at Array2Dimensiones.<init>(Array2Dimensiones.java:18)
at Array2Dimensiones.main(Array2Dimensiones.java:99)



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

kingcreek

Te dejo lo que creo es la solucion si no entendi mal lo que quieres hacer, lo he ajustado para que sirva en array "regular" e "irregular".

Código (java) [Seleccionar]
import java.text.DecimalFormat;

/*
* @Array 2D como promediar cada columna ?
*/
public class Array2Dimensiones implements Mostrar {

private int array[][];
private int array2[][];
private DecimalFormat dosDigi = new DecimalFormat("0.00");

public Array2Dimensiones( String descripcion, int array[][], int array2[][] ) {
print("\""+descripcion+"\"\n");
this.array = array;
this.array2 = array2;
mostrarArray();
}

public void mostrarArray() {
print("Array 2D completo\n");
for( int tmp[] : array) {
for( int tmp2 : tmp ) {
print("{"+tmp2+"}");
}
print("\n");
}

/*
* PROMEDIO DE CADA FILA
*/
print("Promedio de cada fila \n");
for( int f=0; f<array.length; f++ ) {
    double promedio = 0;
    int c;
for( c=0; c<array[f].length; c++ ) {
print(""+array[f][c]);
promedio += array[f][c];
}
print("\t\t\t\t"+dosDigi.format(promedio / c)+"\n");
}

/*
* PROMEDIO DE CADA COLUMNA
*/

//obtenemos la longitud mas alta de las columnas para repetir el bucle for
int cantidad = 0;
int temp = 0;
int x, y;
        int[] segundo;
        for (x = 0; x < array.length; ++x) {
          segundo = array[x];
          for (y = 0; y < segundo.length; ++y) {
              temp++;
          }
          if(cantidad <= temp)
          {
              cantidad = temp;
              temp = 0;
          }
        }
       
print("Promedio de cada columna \n");

for( int f=0; f<cantidad; f++ ) {
double promedio = 0;
int count = 0;
int c;
for( c=0; c < array.length; c++ ) {
    //se filtran las posiciones del array con valor nulo
    if(array[c].length > f)
    {
    print(""+array[c][f]);
    promedio += array[c][f];
    count++;
    }
}
print("\t\t\t\t"+dosDigi.format(promedio / count)+"\n");
}

}


@Override
public void print( String s ) { System.out.print(s); }
public static void main( String []blablabl) {

int array[][] = {{1,2,3},
                {4,5,6},
                        {7,8,9}};

int array2[][] = {{1,2,3},
         {4},
{5,6,7}};

new Array2Dimensiones("2 tipos de Array 2d e Irregular",array,array2);

}
}