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