Diferencia entre revisiones de «Usuario:ManuelRomero/practica 4»

De WikiEducator
Saltar a: navegación, buscar
(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:
=Proyecto de calculadora=
+
package 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 el fin de semana
 
<source lang=java>
 
package calucladora;
 
import javax.swing.*;
 
import java.awt.*;
 
import java.awt.event.*;
 
  
  
 
+
public class EstadoCalculadora {
public class VentanaCalculadora extends JFrame implements ActionListener{
+
//Definir una constante para cada estado
 
+
final int INICIAL =0;
//Estdo de operacion de la calculadora
+
final int OP1 = 1;
final int REAL =0;
+
final int RACIONAL = 1;
+
 
 
int modoOperacion =REAL;
 
 
 
JButton bDiv = new JButton();
 
JButton bSep = new JButton();
 
 
 
// Definimos atributos de mi clase
+
//atributo estrella
JTextField tPantalla = new JTextField();
+
private int estado;
 
 
//Definimos botones
 
Character [] botones ={'7','8','9','C',(char)8592, //Caracter retroceso
 
  '4','5','6','+','%',
 
  '1','2','3','-',(char)177,//caracter +/-
 
  '0','*','/','.','='};
 
 
 
 
Font fuente = new Font("Arial", Font.BOLD,18);
 
 
GridLayout lBotones = new GridLayout(4,5,5,5);
 
BorderLayout lPpal = new BorderLayout();
 
 
JPanel pBotones = new JPanel();
 
 
//Menus
 
JMenuBar barraMenu = new JMenuBar();
 
JMenu mEstilo = new JMenu("Estilo");
 
JMenu mAyuda = new JMenu("Ayuda");
 
JMenu mSalir = new JMenu("Salir");
 
 
JRadioButtonMenuItem  bRacional = new JRadioButtonMenuItem("Racionall");
 
JRadioButtonMenuItem  bReal = new JRadioButtonMenuItem("Real");
 
 
ButtonGroup grupo = new ButtonGroup();
 
 
VentanaCalculadora(){
 
addBotones();
 
addMenu();
 
 
setJMenuBar(barraMenu);
 
 
setLayout(lPpal);
 
tPantalla.setHorizontalAlignment(JTextField.RIGHT);
 
tPantalla.setFont(fuente);
 
  
+
//constructor
add(tPantalla,BorderLayout.NORTH);
+
EstadoCalculadora(){
add(pBotones, BorderLayout.CENTER);
+
estado=INICIAL;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
}
setVisible(true);
+
 
pack();
+
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 void addMenu(){
+
private int inicial(Character e,String valorActual, AccionCalculadora accion){
barraMenu.add(mEstilo);
+
int estado=this.estado;
barraMenu.add(mAyuda);
+
if (esNum(e)){
barraMenu.add(mSalir);
+
estado=OP1;
+
if (negativo(valorActual))
//Añadir escuchadores de evento a los botones
+
accion.actualiza("-"+e.toString());
bReal.addActionListener(this);
+
else
bRacional.addActionListener(this);
+
accion.actualiza(e.toString());
+
}
+
 
grupo.add(bRacional);
+
//...
grupo.add(bReal);
+
+
bReal.setSelected(true);
+
+
mEstilo.add(bRacional);
+
mEstilo.add(bReal);
+
+
+
+
 
 
 +
return estado;
 +
}
 +
private int op1(Character entrada ,String valorActual,AccionCalculadora accion ){
 +
int estado = this.estado;
 +
//...
 +
return estado;
 
}
 
}
private void addBotones(){
 
 
pBotones.setLayout(lBotones);
 
 
for (int i=0;i<20;i++){
 
 
JButton b = new JButton(botones[i].toString());
 
b.setFont(fuente);
 
b.addActionListener(this);
 
pBotones.add(b);
 
if (i==17){
 
bDiv=b;
 
}
 
if (i==18){
 
bSep=b;
 
}
 
  
 +
 +
 +
 +
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(){
public void actionPerformed(ActionEvent e) {
+
  return estado;
if (e.getSource() ==bReal){
+
}
modoOperacion=REAL;
+
 
setTitle("Calculadora Real");
+
 
bDiv.setText("/");
+
private String getEstado(int estado){
bSep.setText(".");
+
 
}else
+
switch (estado){
if (e.getSource() ==bRacional){
+
case INICIAL:
modoOperacion=RACIONAL;
+
      return "INICIAL";
setTitle("Calculadora Racional");
+
case  OP1 :
bDiv.setText(":");
+
return "OPERANDO 1";
bSep.setText("/");
+
case  OP1_REAL:
+
return "OP1_REAL";
}else{
+
    case ESPERANDO_OP2 :
String c = ((JButton)e.getSource()).getText();
+
    return "ESPERANDO_OP2";
tPantalla.setText(tPantalla.getText()+c);
+
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!!!!");
 
}
 
}
public static void main (String []s){
 
VentanaCalculadora v  = new VentanaCalculadora();
 
 
}
 
}
 
+
/**
 +
* 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;
 
}
 
}
  
</source>
+
}//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