Usuario:ManuelRomero/practica 4
De WikiEducator
< Usuario:ManuelRomero
Revisión a fecha de 22:37 24 abr 2012; ManuelRomero (Discusión | contribuciones)
package calculadora;
> 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