Ayuda con programa

Que tal!
Estoy un poco confundido con una calculadora sencilla que estoy haciendo, quisiera saber como puedo y guardando en una variable los botones que se vayan oprimiendo, tanto los numeros como los aoperadores, 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 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
Respuesta
1
No tengo mucho tiempo para leer el codigo, por lo que no se decirte en que te equivocas. A modo de resumen.
El método "Double.valueOf(String)" no admite operaciones, sólo valores numericos, de forma que si intentas hacer :
Double.valueOf("1 + 2")  te dará error, algunos valores de ejemplo para usar el método seria:
Double d = Double.valueOf("1.2d");
d = Double.valueOf("1.2f");
d = Double.valueOf(" -12 ");
d = Double.valueOf(" +12.1 ");
d = Double.valueOf("NaN");
d = Double.valueOf("Infinity");
Por lo que el programa deberias de plantearlo de forma qeu cada vez que se pulse un numero vas guardando las cifras, cuando se pulse una operacion, concatenas todas las cifras y creas el número y realizas la operacion creada... usando solamente los métodos de valueOf no vas a poder hacer lo que quieres.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas