import java.util.Scanner;

public class Quiz02
{
  static int operador=1;
  
  public static void main(String args[])
  {
    System.out.println("Tablas de operadores");
    Scanner teclado=new Scanner(System.in);
    while(operador!=0)
    {
      System.out.println("Operador [1=+ 2=- 3=* 4=/ 5=% 0=Salir]: ");
      operador=teclado.nextInt();
      
      if(operador!=0)
      {
        System.out.print("minimo: ");
        double minimo=teclado.nextDouble();
        
        System.out.print("\nmaximo: ");
        double maximo=teclado.nextDouble();
        
        System.out.print("\nincremento: ");
        double incremento=teclado.nextDouble();
        while(incrementoEsInvalido(incremento))
        {
          System.out.print("\nEl incremento debe ser positivo");
          System.out.print("\nincremento: ");
          incremento=teclado.nextDouble();
        }
        
        System.out.print("    " + nombrarOperador(operador) + " |");
        
        int distancia=6;
        double numero=minimo;
        while(numero<=maximo)
        {
          System.out.printf("%6.1f", numero); 
          distancia=distancia + 6;
          numero=numero + incremento;
        }
        
        System.out.println("");
        int dist=0;
        while(dist<=distancia)
        {
          System.out.print("-");
          dist++;
        }
        
        System.out.println("");
        
        double numeroEnFila=minimo;
        while(numeroEnFila<=maximo)
        {
          System.out.printf("%7s",numeroEnFila+ " |");
          
          double numeroEnColumna=minimo;
          while(numeroEnColumna<=maximo)
          { 
            System.out.printf("%6.1f", calcularResultado(numeroEnColumna, numeroEnFila));
            numeroEnColumna=numeroEnColumna+incremento;
          }
          numeroEnFila=numeroEnFila + incremento;
          System.out.println("");
        }
        System.out.println("");
      }
    }
  }
  
  public static String nombrarOperador(int operador)
  {
    switch(operador)
    {
      case 1:
        return "+";
      case 2: 
        return "-";
      case 3:
        return "*";
      case 4:
        return "/";
      case 5:
        return "%"; 
    }
    return "";
  }
  
  public static boolean incrementoEsInvalido(double incremento)
  {
    if(incremento<=0)
      return true;
    else return false;
  }
  
  public static double calcularResultado(double numeroEnColumna, double numeroEnFila)
  {
    switch(nombrarOperador(operador))
    {
      case "+":
        return (numeroEnFila + numeroEnColumna);
      case "-":
        return (numeroEnFila - numeroEnColumna);
      case "*":
        return (numeroEnFila * numeroEnColumna);
      case "/":
        return (numeroEnFila / numeroEnColumna);
      case "%":
        return (numeroEnFila % numeroEnColumna);
    }
    return 0;
  }
}