Diferencia entre revisiones de «Usuario:ManuelRomero/practica 4»
(Página creada con '=Proyecto de calculadora= *El siguiente código está sin comentar es el que hemos realizado en clase {{Media|'''Muchas gracias a todas/os por vuestra atención''''}} Disfrutad…') |
|||
Línea 1: | Línea 1: | ||
− | + | package calculadora; | |
− | + | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | public class EstadoCalculadora { | |
− | public class | + | //Definir una constante para cada estado |
− | + | final int INICIAL =0; | |
− | // | + | final int OP1 = 1; |
− | final int | + | |
− | final int | + | |
− | |||
− | |||
− | |||
− | // | + | //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 |
Revisión de 22:36 24 abr 2012
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