Ejercicio 2. Cuadrícula y suma.

Escribe un programa que pida 20 números enteros. Estos números se deben introducir en un array de 4 filas por 5 columnas. El programa mostrará las sumas parciales de filas y columnas igual que si de una hoja de cálculo se tratara. La suma total debe aparecer en la esquina inferior derecha.

En este ejercicio vamos a hacer uso de los arrays de dos dimensiones, repasando el ejercicio que hice en su momento, voy a hacer unos cambios que creo que nos permitirán adaptarnos mejor al enunciado, aunque quizás sea un poco más “enredoso”.

Solicitud de datos y almacenar cálculos

En primer lugar, vamos a crear las variables que utilizaremos para almacenar los resultados:

int[][] numeros = new int[4][5];
int[] sumaFila = new int[4];
int [] sumaColumna = new int[6]
;

En primer lugar, pediremos los números al usuario, indicando la fila y columna que ocuparán en la cuadrícula.

Para ello, utilizaremos un bucle for, con otro en su interior anidado.

for (int i=0; i < 4; i++) {
for (int j= 0; j< 5; j++) {
System.out.println("Introduce el número de la fila " + (i+1) + " y la columna " + (j+1) + ": ");
solicitud de número.
sumaColumna[5] = numeros[i][j]; // Esta suma el total.
sumaFila[i]+= numeros[i][j];
sumaColumna[j] += numeros[i][j];
}
}

Con este conjunto de bucles, recorreríamos tanto el array inicial que solicita los números al usuario, como los dos que hemos creado para almacenar los sumatorios correspondientes de las columnas y las filas.

Presentación en pantalla

Para realizar una presentación en pantalla en esta ocasión vamos a trabajar con la opción System.out.printf(); para poder dar formato a la salida y que quede más visual.

Con este código, creamos la primera cabecera con las columnas.

System.out.printf("%12s %10s %10s %10s %10s %10s %10s", "", "Columna 1", "Columna 2", "Columna 3", "Columna 4", "Columna 5", "Suma Fila");

Posteriormente, leemos los datos de los arrays y los vamos colocando en pantalla mediante este bucle:

for (int i =0; i<5; i++) { // esto leería las filas
  if (i==4) {
  System.out.printf("%12s", "Suma Columna");
  }else {
    System.out.printf("%12s", "Fila "+(i+1));
  }
  for (int j=0; j<6; j++) {
  if (i == 4) {
      System.out.printf("%11d", sumaColumna[j]);
    } else if (j == 5){
      System.out.printf("%11d", sumaFila[i]);
    } else {
      System.out.printf("%11d", numeros[i][j]);
    }
  }
System.out.println("");
}

Dejo aquí el código completo que puedes copiar en tu ID y lanzar, debajo hacemos algunas anotaciones de este último for, mencionando las líneas exactas para hacer hincapié en algunas de las cosas que pueden ser “más difíciles de ver”.

package arrays2dimensiones;

import java.util.Scanner;

/**
 *Ejercicio02
 *
 *	Escribe un programa que pida 20 números enteros. Estos números se deben introducir en un array de 4 filas
 *	por 5 columnas. El programa mostrará las sumas parciales de filas y columnas igual que si de una hoja de
 *	cálculo se tratara. La suma total debe aparecer en la esquina inferior derecha.
 *
 * @author manolohidalgo_
 * @since 27-11-2019
 */

public class Arrays2Dimension02 {

	public static void main(String[] args) {
		//Definimos las variables a utilizar en el programa
		Scanner scanner = new Scanner(System.in);
		int[][] numeros = new int[4][5];
		int[] sumaFila = new int[4];
		int [] sumaColumna = new int[6];
		
		// Información al usuario y petición de datos
		System.out.println("Incluye 20 números, repartidos en cuatro filas y cinco columnas.");
		for (int i=0; i < 4; i++) {
		  for (int j= 0; j< 5; j++) {
		    System.out.println("Introduce el número de la fila " + (i+1) + " y la columna " + (j+1) + ": ");
		    numeros[i][j] = scanner.nextInt();
		    sumaColumna[5] += numeros[i][j]; // Esta suma el total.
		    sumaFila[i]+= numeros[i][j];
		    sumaColumna[j] += numeros[i][j];
		  }
		}
		System.out.printf("%12s %10s %10s %10s %10s %10s %10s", "", "Columna 1", "Columna 2", "Columna 3", "Columna 4", "Columna 5", "Suma Fila");
		System.out.println("");
		for (int i =0; i<5; i++) { // esto leería las filas
		  if (i==4) {
		  System.out.printf("%12s", "Suma Columna");
		  }else {
		    System.out.printf("%12s", "Fila "+(i+1));
		  }
		  for (int j=0; j<6; j++) {
		    if (i == 4) {
		      System.out.printf("%11d", sumaColumna[j]);
		    } else if (j == 5){
		      System.out.printf("%11d", sumaFila[i]);
		    } else {
		      System.out.printf("%11d", numeros[i][j]);
		    }
		  }
		  System.out.println("");
		}
	}
}

Al recorrer los arrays debemos tener cuidado con no ofrecer un índice incorrecto, mayor al número de espacios que este tiene, ya que en este caso, nos saldría un error que veremos en muchas ocasiones, IndexOfBoud.

En este ejercicio, como hacemos lectura de un array números y de los de suma, tenemos que tener muy presente cuando va a leer cada uno, y que índice debe mostrar en ese hueco.

En concreto, en la línea 39 del código, vemos como el if indica que si es 4 el ciclo debe funcionar de forma distinta, a si es cualquiera de las otras opciones, en este caso, es para variar de poner “Fila X” a poner “Suma Columna”.

Posteriormente, en la línea 45 y 47 vemos que también hacemos unas excepciones al funcionamiento habitual del bucle, ya que estas lecturas (i = 4) y (j = 5) nos llevan a las celdas que pertenecen a los otros arrays.

Puedes acceder a este ejercicio en GitHub en este enlace.

Espero que estos ejercicios de repaso de JAVA realizados durante el curso 2019/2020 en la clase de programación del I.E.S. Gran Capitán (Córdoba) puedan servirte si estás empezando, si tienes alguna duda al respecto, alguna sugerencia o algo que no te haya quedado claro, no tienes más que escribirme en los comentarios, estoy aquí para ayudarte y aprender, ¡Nos leemos!