Ayuda Programa

Que tal!
Tu eres mi salvación pues en una anterior pregunta fuiste el unico que me dió la respuesta correcta y me sacó del apuro, espero me puedas ayudar tambien con lo siguiente:
Estoy un poco confundido con una calculadora sencilla que estoy haciendo, quisiera saber como puedo ir guardando en una variable los botones que se vayan oprimiendo, tanto los numeros como los operadores, es decir si yo he oprimido por ej : 12+5-8*2 y así sucesivamente, la verdad es que he intentado mucho, investigado pero no me da todo bien, no se si haya forma de guardarlo primero como cadena(este si se puede), pero convertirlo todo a un tipo doble, pues la cadena posee operadores tambien como se ve en el ejemplo anterior, lo intenté con Double.valueOf(String) y me da error.
Te agradezco de antemano si me puedes ayudar lo mas pronto posible.
Te adiciono el codigo de lo que yo he hecho (es un applet).
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.lang.*;
// <applet width="400" height="400" code="AppletCalculadora"></applet>
public class AppletCalculadora extends Applet implements ActionListener{
Button b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18;
TextField t1;
Panel pan2;
double valor = 0.0;
double res = 0.0;
String ultBoton = "";
String total = "";
public AppletCalculadora() {
setLayout(new BorderLayout());
Panel pan2 = new Panel();
t1 = new TextField();
add("North",t1);
add("Center",pan2);
pan2.setLayout(new GridLayout(6, 3, 10, 10));
b1 = new Button("1");
b2 = new Button("2");
b3 = new Button("3");
b4 = new Button("4");
b5 = new Button("5");
b6 = new Button("6");
b7 = new Button("7");
b8 = new Button("8");
b9 = new Button("9");
b10 = new Button(".");
b11 = new Button("0");
b12 = new Button("CE");
b13 = new Button("+");
b14 = new Button("-");
b15 = new Button("=");
b16 = new Button("*");
b17 = new Button("/");
b18 = new Button("C");
pan2.add(b1);
pan2.add(b2);
pan2.add(b3);
pan2.add(b4);
pan2.add(b5);
pan2.add(b6);
pan2.add(b7);
pan2.add(b8);
pan2.add(b9);
pan2.add(b10);
pan2.add(b11);
pan2.add(b12);
pan2.add(b13);
pan2.add(b14);
pan2.add(b15);
pan2.add(b16);
pan2.add(b17);
pan2.add(b18);
b1. AddActionListener(this);
b2. AddActionListener(this); // Se da la facultad a los botones de
b3. AddActionListener(this); // poder ser escuchados
b4. AddActionListener(this);
b5. AddActionListener(this);
b6. AddActionListener(this);
b7. AddActionListener(this);
b8. AddActionListener(this);
b9. AddActionListener(this);
b10. AddActionListener(this);
b11. AddActionListener(this);
b12. AddActionListener(this);
b13. AddActionListener(this);
b14. AddActionListener(this);
b15. AddActionListener(this);
b16. AddActionListener(this);
b17. AddActionListener(this);
b18. AddActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
String cadena = "";
if ((ae.getActionCommand() == "1") || (ae.getActionCommand() == "0") ||
(ae.getActionCommand() == "2") || (ae.getActionCommand() == "3") ||
(ae.getActionCommand() == "4") || (ae.getActionCommand() == "5") ||
(ae.getActionCommand() == "6") || (ae.getActionCommand() == "7")||
(ae.getActionCommand() == "8") || (ae.getActionCommand() == "9"))
{
String boton = ae.getActionCommand();
if((ultBoton == "+")||(ultBoton == "-")||
(ultBoton == "/")||(ultBoton == "*"))
{
t1.setText("");
total = total + ultBoton;
//String total2 = total;
}
if (ae.getActionCommand() == "0")
{
if (valor == 0)
{
t1.setText("");
ultBoton = ae.getActionCommand();
total = total + ultBoton;
//String total2 = total;
}
else{
t1.setText("" + t1.getText() + boton);
cadena = t1.getText();
String cadena2 = cadena;
valor = Double.parseDouble(t1.getText());
ultBoton = ae.getActionCommand();
total = total + ultBoton;
//String total2 = total;
}
}
else {
t1.setText("" + t1.getText() + boton);
cadena = t1.getText();
String cadena2 = cadena;
valor = Double.parseDouble(t1.getText());
ultBoton = ae.getActionCommand();
total = total + ultBoton;
//String total2 = total;
}
}
// fin del mientras
if(ae.getActionCommand() == "+")
{
t1.setText(""+ total);
res = res + valor;
t1.setText("" + res);
valor = 0.0;
ultBoton = ae.getActionCommand();
//cadena = " ";
}
if(ae.getActionCommand() == "-")
{
res = res - valor;
t1.setText("" + res);
valor = 0;
//cadena = " ";
ultBoton = ae.getActionCommand();
}
if(ae.getActionCommand() == "*")
{
if (res != 0)
{
res = res * valor;
t1.setText("" + res);
valor = 0;
}
else
{
res = valor;
t1.setText("" + res);
valor = 0;
}
//cadena = " ";
ultBoton = ae.getActionCommand();
}
if(ae.getActionCommand() == "/")
{
res = res / valor;
t1.setText("" + res);
valor = 0;
//cadena = " ";
ultBoton = ae.getActionCommand();
}
if(ae.getActionCommand() == "CE")
{
t1.setText(""+res);
//res = res + valor;
valor = 0;
//cadena = " ";
}
if(ae.getActionCommand() == "C")
{
//res = res + valor;
t1.setText("");
valor = 0;
//boton = "";
total ="";
//cadena = " ";
res = 0;
}
if(ae.getActionCommand() == ".")
{
//res = res + valor;
//t1.setText("0");
t1.setText(""+ t1.getText()+".");
res = 0;
valor = 0;
}
} // fin del metodo actionPerformed
} // fin de la clase

1 Respuesta

Respuesta
1
Te doy otra forma de realizar las operaciones que quizas te pueda ayudar. Simplemente necesitas 3 variables (2 para los operandos y una para el operador). Cuando pulsan sobre un numero, la primera vez, lo guardas como un operando, luego guardas el operador pulsado y cuando pulsen otro numero, realizas la operacion y la guardas como un nuevo operando. Asi hasta que pulsen el "=" que le muestras el resultado que ya tendras en uno de los operandos.
No se si me he explicado, la idea es ir haciendo 5+4 (guardo el 20) * 8 (guardo el 160) -30 (guardo el 130) ...
Si no te aclaras así, ya buscaremos de solucionar de la manera que tu dices, que podriamos utilizar un vector para guardar cada pulsacion en una posicion. Luego intentas pasar cada uno a numero, haciendo un catch si se produce una excepcion, sabiendo de esta manera que no es un numero, sino un operador.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas