import java.util.Scanner;
public class Quiz02_TablasOperadoresAritmeticos_JavierDuran
{
  public static void main(String args[])
  {
    Scanner teclado = new Scanner(System.in);
    
    System.out.println("Tabla de operadores");
    System.out.println();
    
    double minimo = 0;
    double maximo = 0;
    double incremento = 0;
    double x1 = 0; //ayuda a mantener control sobre la suma del mínimo y el incremento
    double x2 = 0; // ayuda a mantener control sobre la suma del máximo y el incremento
    double x3 = 0;// ayuda a mantener control sobre la suma del incremento y el incremento
    String opcion = "a";
    
    while (opcion.equals("a"))
    {
      System.out.print("Operador [+|-|*|/|%|Salir] : ");
      teclado.skip("[\n\r\t ]*");
      opcion = teclado.nextLine();
      
      if (opcion.equalsIgnoreCase("salir"))
        ;
      else
      {
        while (minimo >= maximo)
        {
          System.out.print("Valor mínimo: ");
          minimo = teclado.nextDouble();
          System.out.print("Valor máximo: ");
          maximo = teclado.nextDouble();
          if (minimo > maximo)
            System.err.println("El valor mínimo debe ser menor al máximo.");
          if (minimo == maximo)
            System.err.println("Los valores mínimo y máximo deben ser diferentes entre sí.");
        }
        while (incremento <= 0)
        {
          System.out.print("Incremento: ");
          incremento = teclado.nextDouble();
          if (incremento <= 0)
            System.err.println("El incremento debe ser mayor a 0.");
        }
        System.out.println();
        
        if (opcion.equals("+"))
          System.out.print("    + |");
        else if (opcion.equals("-"))
          System.out.print("    - |");
        else if (opcion.equals("*"))
          System.out.print("    * |");
        else if (opcion.equals("/"))
          System.out.print("    / |");
        else if (opcion.equals("%"))
          System.out.print("    % |");
        while (minimo + x3 <= maximo)
        {
          if ((long)(minimo + x3) == (minimo + x3))
            System.out.printf("%6.0f", (minimo + x3));
          else
            System.out.printf("%6.1f", (minimo + x3));
          x3 = incremento + x3;
        }
        System.out.println();
        x3 = 0;
        while (minimo + x3 <= maximo)
        {
          System.out.print("------");
          x3 = incremento + x3;
        }
        System.out.println("-------");
        if ((long)(minimo) == minimo)
          System.out.printf("%5.0f |", minimo);
        else
          System.out.printf("%5.1f |", minimo);
        x3 = 0;
        x1 = minimo;
        x2 = maximo;
        
        switch ( opcion )
        {
          case "+":
            while (x1 <= maximo)
          {
            while (x1 + x3 <= x2)
            {
              if ((long)(minimo + x1 + x3) == (minimo + x1 + x3))
                System.out.printf("%6.0f", (minimo + x1 + x3));
              else
                System.out.printf("%6.1f", (minimo + x1 + x3));
              x3 = incremento + x3;
            }
            System.out.println();
            if (x1 + incremento > maximo)
              ;
            else
            {
              if ((long)(x1 + incremento) == x1 + incremento)
                System.out.printf("%5.0f |", x1 + incremento);
              else
                System.out.printf("%5.1f |", x1 + incremento);
            }
            x1 = x1 + incremento;
            x2 = x2 + incremento;
            x3 = 0;
          }
            System.out.println();
            break;
            
          case "-":
            while (x1 <= maximo)
          {
            while (x1 + x3 <= x2)
            {
              if ((long)(x1 - (minimo + x3)) == (x1 - (minimo + x3)))
                System.out.printf("%6.0f", (x1 - (minimo + x3)));
              else
                System.out.printf("%6.1f", (x1 - (minimo + x3)));
              x3 = incremento + x3;
            }
            System.out.println();
            if (x1 + incremento > maximo)
              ;
            else
            {
              if ((long)(x1 + incremento) == x1 + incremento)
                System.out.printf("%5.0f |", x1 + incremento);
              else
                System.out.printf("%5.1f |", x1 + incremento);
            }
            x1 = x1 + incremento;
            x2 = x2 + incremento;
            x3 = 0;
          }
            System.out.println();
            break;
            
          case "*":
            while (x1 <= maximo)
          {
            while (x1 + x3 <= x2)
            {
              if ((long)((minimo + x3) * x1) == ((minimo + x3) * x1))
                System.out.printf("%6.0f", ((minimo + x3) * x1));
              else
                System.out.printf("%6.1f", ((minimo + x3) * x1));
              x3 = incremento + x3;
            }
            System.out.println();
            if (x1 + incremento > maximo)
              ;
            else
            {
              if ((long)(x1 + incremento) == x1 + incremento)
                System.out.printf("%5.0f |", x1 + incremento);
              else
                System.out.printf("%5.1f |", x1 + incremento);
            }
            x1 = x1 + incremento;
            x2 = x2 + incremento;
            x3 = 0;
          }
            System.out.println();
            break;
            
          case "/":
            while (x1 <= maximo)
          {
            while (x1 + x3 <= x2)
            {
              if ((long)(x1 / (minimo + x3)) == (x1 / (minimo + x3)))
                System.out.printf("%6.0f", (x1 / (minimo + x3)));
              else
                System.out.printf("%6.1f", (x1 / (minimo + x3)));
              x3 = incremento + x3;
            }
            System.out.println();
            if (x1 + incremento > maximo)
              ;
            else
            {
              if ((long)(x1 + incremento) == x1 + incremento)
                System.out.printf("%5.0f |", x1 + incremento);
              else
                System.out.printf("%5.1f |", x1 + incremento);
            }
            x1 = x1 + incremento;
            x2 = x2 + incremento;
            x3 = 0;
          }
            System.out.println();
            break;
            
          case "%":
            while (x1 <= maximo)
          {
            while (x1 + x3 <= x2)
            {
              if ((long)(x1 % (minimo + x3)) == (x1 % (minimo + x3)))
                System.out.printf("%6.0f", (x1 % (minimo + x3)));
              else
                System.out.printf("%6.1f", (x1 % (minimo + x3)));
              x3 = incremento + x3;
            }
            System.out.println();
            if (x1 + incremento > maximo)
              ;
            else
            {
              if ((long)(x1 + incremento) == x1 + incremento)
                System.out.printf("%5.0f |", x1 + incremento);
              else
                System.out.printf("%5.1f |", x1 + incremento);
            }
            x1 = x1 + incremento;
            x2 = x2 + incremento;
            x3 = 0;
          }
            System.out.println();
            break;
        }
        incremento = 0;
        minimo = 0;
        maximo = 0;
        opcion = "a";
      }
    }
  }
}