import java.util.Scanner;

/**
 * Programa que maneja arreglos bidimensionales de numeros,
 * cadenas y tipos abstractos.
*/
public class ArregloBidimensional {

   // Limpia la pantalla usando lineas en blanco
   public void limpiar() {
      for (int i = 0; i < 30; i++) System.out.println("");
   }

   // Visualiza el menu
   public void visualizaMenu() {
      System.out.println("Menu");
      System.out.println("");
      System.out.println("1) Agregar");
      System.out.println("2) Modificar");
      System.out.println("3) Borrar");
      System.out.println("4) Visualizar todos");
      System.out.println("0) Salir");
   }

   // Arreglo bidimensional para valores numericos.
   public void arregloBidimensionalDouble() {
      double [][] Arr;
      int Fila, Columna;

      // objeto para trabajar con teclado
      Scanner teclado = new Scanner(System.in);

      // Pregunta sobre las filas del arrglo
      do {
         System.out.println("Filas? ");
         Fila = teclado.nextInt();
         if(Fila <= 0 || Fila > 10) {
            System.out.println("Error en el numero de filas, rango de 1 a 10");
         }
      } while(Fila <= 0 || Fila > 10);

      // Pregunta sobre las columnas del arrglo
      do {
         System.out.println("Columnas? ");
         Columna = teclado.nextInt();
         if(Columna <= 0 || Columna > 10) {
            System.out.println("Error en el numero de Columnas, rango de 1 a 10");
         }
      } while(Columna <= 0 || Columna > 10);
      // Inicializamos nuestro arreglo.
      Arr = new double[Fila][Columna];

      // op para las opciones del menu
      // fila_act para manejar las filas del arreglo.
      // col_ act para manejar las columnas del arreglo.
      int op = 0, fila_act = 0, col_act = 0;

      // Menu
      do {
//         limpiar();
         visualizaMenu();
         System.out.println("");
         System.out.println("Opcion: ");
         op = teclado.nextInt();

         switch(op) {
         // Salir
         case 0:
            break;
         // Adicionar
         case 1:
            // FILAS
            do {
               System.out.println("Fila? ");
               fila_act = teclado.nextInt();
               if(fila_act < 0 || fila_act >= Fila) {
                  System.out.println("Error en la fila, rango de 0 a " + Fila);
               }
            } while(fila_act < 0 || fila_act >= Fila);

            // COLUMNAS
            do {
               System.out.println("Columna? ");
               col_act = teclado.nextInt();
               if(col_act < 0 || col_act >= Columna) {
                  System.out.println("Error en la columa, rango de 0 a " + Columna);
               }
            } while(col_act < 0 || col_act >= Columna);

            System.out.println("Valor? ");
            Arr[fila_act][col_act] = teclado.nextDouble();
            break;

         // Modificar
         case 2:
            // LES TOCA HACERLO A USTEDES
            break;

         // Borrar
         case 3:
            // FILAS
            do {
               System.out.println("Fila? ");
               fila_act = teclado.nextInt();
               if(fila_act < 0 || fila_act >= Fila) {
                  System.out.println("Error en la fila, rango de 0 a " + Fila);
               }
            } while(fila_act < 0 || fila_act >= Fila);

            // COLUMNAS
            do {
               System.out.println("Columna? ");
               col_act = teclado.nextInt();
               if(col_act < 0 || col_act >= Columna) {
                  System.out.println("Error en la columna, rango de 0 a " + Columna);
               }
            } while(col_act < 0 || col_act >= Columna);

            Arr[fila_act][col_act] = 0;
            break;

         // Visualizar
         case 4:
            // Recorre las filas.
            for(int i = 0; i < Fila; i++) {
               // Recorre las columnas
               for(int j = 0; j < Columna; j++) {
                  System.out.println("[" + i + "][" + j + "] --> " + Arr[i][j]);
               }
            }
            break;

         default:
            System.out.println("Opcion no reconocidad");

         }
      } while(op != 0);
      System.out.println("Fin del arreglo bidimensional");
   }

   public static void main(String [] args) {
      ArregloBidimensional ab = new ArregloBidimensional();

      ab.arregloBidimensionalDouble();
   }
}
