Usuario:ManuelRomero/practica 4

De WikiEducator
Saltar a: navegación, buscar

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