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 09: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