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
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);
}
}
"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)
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".
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);
}
}