|
|
(3 revisiones intermedias por el mismo usuario no mostrado) |
Línea 1: |
Línea 1: |
− | package calculadora;
| + | {{:Usuario:ManuelRomero/CursoJavaUml/Practicas/PracticaCalculadora/nav}} |
− | | + | |
− | | + | |
− | | + | |
− | public class EstadoCalculadora {
| + | |
− | //Definir una constante para cada estado
| + | |
− | final int INICIAL =0;
| + | |
− | final int OP1 = 1;
| + | |
− |
| + | |
− |
| + | |
− |
| + | |
− | //atributo estrella
| + | |
− | private int estado;
| + | |
− |
| + | |
− |
| + | |
− | | + | |
− | //constructor
| + | |
− | EstadoCalculadora(){
| + | |
− | estado=INICIAL;
| + | |
− | }
| + | |
− | | + | |
− | private boolean esNum(char c){//0 1 2 3 4 5 6 7 8 9
| + | |
− | }
| + | |
− | private boolean esSepRac(char c){// /
| + | |
− | }
| + | |
− | private boolean esOpReal (char c){//+ - * / %
| + | |
− | }
| + | |
− | private boolean esOpRacional (char c){
| + | |
− | switch (c){
| + | |
− | case '+':
| + | |
− | case '-':
| + | |
− | case '*':
| + | |
− | case':':
| + | |
− | case '%':
| + | |
− | return true;
| + | |
− | default:
| + | |
− | return false;
| + | |
− | }
| + | |
− | }
| + | |
− | private boolean esIgual(char c){ // =
| + | |
− | }
| + | |
− | private boolean esPto(char c){
| + | |
− | }
| + | |
− | private boolean esClear(char c){
| + | |
− | }
| + | |
− | private boolean esRetroceso(char c){
| + | |
− | if (c==(char)8592)
| + | |
− | return true;
| + | |
− | else
| + | |
− | return false;
| + | |
− | }
| + | |
− | private boolean esCambioSigno(char c){
| + | |
− | if (c==(char)177)
| + | |
− | return true;
| + | |
− | else
| + | |
− | return false;
| + | |
− | }
| + | |
− | /*
| + | |
− | * La e es la entrada de la calculadora
| + | |
− | * el método cambia de estado
| + | |
− | */
| + | |
− |
| + | |
− | private int inicial(Character e,String valorActual, AccionCalculadora accion){
| + | |
− | int estado=this.estado;
| + | |
− | if (esNum(e)){
| + | |
− | estado=OP1;
| + | |
− | if (negativo(valorActual))
| + | |
− | accion.actualiza("-"+e.toString());
| + | |
− | else
| + | |
− | accion.actualiza(e.toString());
| + | |
− | }
| + | |
− | | + | |
− | //...
| + | |
− |
| + | |
− | return estado;
| + | |
− | }
| + | |
− | private int op1(Character entrada ,String valorActual,AccionCalculadora accion ){
| + | |
− | int estado = this.estado;
| + | |
− | //...
| + | |
− | return estado;
| + | |
− | }
| + | |
− | | + | |
− | | + | |
− | | + | |
− | | + | |
− | private void inicializarEstado(AccionCalculadora accion){
| + | |
− | estado=INICIAL;
| + | |
− | //accion.actualiza("0");
| + | |
− | }
| + | |
− | /**
| + | |
− | * cambia el estado de la calculadora
| + | |
− | * para ello tiene encuenta:
| + | |
− | * el estadoActual
| + | |
− | * la entrada
| + | |
− | * ValorActual de la pantalla de la calculadora
| + | |
− | * el tipo de calculadora
| + | |
− | *
| + | |
− | * @param entrada
| + | |
− | * @param valorActual
| + | |
− | * @param accion
| + | |
− | * @param tipo
| + | |
− | */
| + | |
− | public void cambiaEstado(Character entrada,String valorActual, AccionCalculadora accion, int tipo){
| + | |
− | System.out.println("accion estado actual: "+getEstado(estado) + " entrada "+entrada);
| + | |
− | if (esClear(entrada))
| + | |
− | inicializarEstado(accion);
| + | |
− | else
| + | |
− | switch (estado){
| + | |
− | case INICIAL:
| + | |
− | estado=inicial(entrada,valorActual, accion);
| + | |
− | break;
| + | |
− | case OP1 :
| + | |
− | estado = op1(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− | case OP1_REAL:
| + | |
− | estado =op1Real(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− | case ESPERANDO_OP2:
| + | |
− | estado = esperandoOp2(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− | case OP2:
| + | |
− | estado = op2(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− | case OP2_REAL:
| + | |
− | estado = op2Real(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− | case ESPERANDO_DEN_OP1:
| + | |
− | estado = esperandoDenOp1(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− | case ESPERANDO_DEN_OP2:
| + | |
− | estado = esperandoDenOp2(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− | case DEN_OP1:
| + | |
− | estado = denOp1(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− | case DEN_OP2:
| + | |
− | estado = denOp2(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− | case RTDO:
| + | |
− | estado = rtdo(entrada,valorActual,accion,tipo);
| + | |
− | break;
| + | |
− |
| + | |
− | }//End switch
| + | |
− | System.out.println("Estado siguiente "+ getEstado(estado));
| + | |
− | System.out.println("===================================");
| + | |
− | }
| + | |
− | public int getEstado(){
| + | |
− | return estado;
| + | |
− | }
| + | |
− | | + | |
− | | + | |
− | private String getEstado(int estado){
| + | |
− | | + | |
− | switch (estado){
| + | |
− | case INICIAL:
| + | |
− | return "INICIAL";
| + | |
− | case OP1 :
| + | |
− | return "OPERANDO 1";
| + | |
− | case OP1_REAL:
| + | |
− | return "OP1_REAL";
| + | |
− | case ESPERANDO_OP2 :
| + | |
− | return "ESPERANDO_OP2";
| + | |
− | case OP2 :
| + | |
− | return "OP2";
| + | |
− | case OP2_REAL :
| + | |
− | return "OP2_REAL";
| + | |
− | case RTDO :
| + | |
− | return "RTDO";
| + | |
− | case ESPERANDO_DEN_OP1:
| + | |
− | return "ESPERANDO_DEN_OP1";
| + | |
− | case DEN_OP1 :
| + | |
− | return "DEN_OP1";
| + | |
− | case ESPERANDO_DEN_OP2:
| + | |
− | return "ESPERANDO_DE_OP2";
| + | |
− | case DEN_OP2 :
| + | |
− | return "DEN_OP2";
| + | |
− | default:
| + | |
− | return("SIN ESTADO!!!!");
| + | |
− | }
| + | |
− | }
| + | |
− | /**
| + | |
− | * Me verifica si un número es negativo
| + | |
− | * Paso solamente el número a verificar como un string
| + | |
− | * @return true si el número es negativo falso en otro caso
| + | |
− | */
| + | |
− | private boolean negativo(String s){
| + | |
− | //Verificar si un número es negativo
| + | |
− | if (s.indexOf('-')!=-1){
| + | |
− | System.out.println("Valor de s "+s);
| + | |
− | return true;
| + | |
− | }
| + | |
− | else
| + | |
− | return false;
| + | |
− | }
| + | |
− | | + | |
− | }//eND CLASE
| + | |