Java

*Espero me puedas ayudar con mi programa, mi problema es con un programa hecho en java que se supone debe tener las funciones de una calculadora, el programa es el siguiente(Creo que el problema esta en la ultima parte):
import java.awt.*;
import java.awt.event.*;
public class Calculadora implements ActionListener{
Frame frame;
TextField tx1;
Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,bMas,bMenos,bPor,bEntre,bPunto;
Button bIgual,Ac,bPorciento,bRaiz,bCuadrado;
boolean bp=false;
boolean bandera=true;
double x=0,y=0;
char z;
public Calculadora(){
frame=new Frame();
frame.setLayout(new FlowLayout());
tx1=new TextField(50);
b0=new Button("0");
b0.addActionListener(this);
b1=new Button("1");
b1.addActionListener(this);
b2=new Button("2");
b2.addActionListener(this);
b3=new Button("3");
b3.addActionListener(this);
b4=new Button("4");
b4.addActionListener(this);
b5=new Button("5");
b5.addActionListener(this);
b6=new Button("6");
b6.addActionListener(this);
b7=new Button("7");
b7.addActionListener(this);
b8=new Button("8");
b8.addActionListener(this);
b9=new Button("9");
b9.addActionListener(this);
bMas=new Button("+");
bMas.addActionListener(this);
bMenos=new Button("-");
bMenos.addActionListener(this);
bPor=new Button("*");
bPor.addActionListener(this);
bEntre=new Button("/");
bEntre.addActionListener(this);
bPunto=new Button(".");
bPunto.addActionListener(this);
bIgual=new Button("=");
bIgual.addActionListener(this);
Ac=new Button("AC");
Ac.addActionListener(this);
bPorciento=new Button("%");
bPorciento.addActionListener(this);
bRaiz=new Button("Raiz Cuadrada");
bRaiz.addActionListener(this);
bCuadrado=new Button("x*x");
bCuadrado.addActionListener(this);
frame.add(tx1);
frame.add(b0);
frame.add(b1);
frame.add(b2);
frame.add(b3);
frame.add(b4);
frame.add(b5);
frame.add(b6);
frame.add(b7);
frame.add(b8);
frame.add(b9);
frame.add(bMas);
frame.add(bMenos);
frame.add(bPor);
frame.add(bEntre);
frame.add(bPunto);
frame.add(bIgual);
frame.add(Ac);
frame.add(bPorciento);
frame.add(bRaiz);
frame.add(bCuadrado);
frame.setSize(400,400);
frame.show();
}
public void actionPerformed(ActionEvent e){
char tecla;
tecla=e.getActionCommand().charAt(0);
if (Character.isDigit(tecla))
tx1.setText(tx1.getText()+tecla);
else
if (tecla=='.'){
if (!bp){
tx1.setText(tx1.getText()+tecla);
bp=true;
}
}
else
if(tecla=='A'){
tx1.setText("");
bp=false;
x=0;
y=0;
bandera=true;
bp=false;
}
else
if(tecla=='R'){
x=Double.parseDouble(tx1.getText());
x=Math.sqrt(x);
tx1.setText(String.valueOf(x));
}
else
if(tecla=='x'){
x=Double.parseDouble(tx1.getText());
x=Math.pow(x,2);
tx1.setText(String.valueOf(x));
}
else
if(tecla=='='){
y=0;
Reduce();
tx1.setText(String.valueOf(x));
}
else
if(bandera){
bandera=false;
x=Double.parseDouble(tx1.getText());
}
else
y=0;
z=tecla;
tx1.setText("");
bandera=true;
bp=false;
}
public static void main(String arg[]){
Calculadora Cal=new Calculadora();
}
public void Reduce(){
switch(z){
case '+':x+=y;
break;
case '-':x-=y;
break;
case '*':x*=y;
break;
case '/':x/=y;
break;
case '%':x=x*y/100;
break;
}
}
}
*Espero que me puedas ayudar con este gran problema que tengo.

3 Respuestas

Respuesta
1
Creo que en lugar de utilizar la Interfase ActionEvent es mejor utilizar la Interfase MouseEvent, es decir que la declaración de la clase sería:
public class Calculadora implements MouseListener{
.
.
.
}
Los Métodos de MouseListener que debes implementar son:
MouseClicked(), mouseEntered(), mouseExited(), mousePressed() y mouseReleased()
Todos son "public void" y reciben como parámetro un Objeto MouseEvent. En el que escribirás código es en el método mouseClicked ...
public void mouseClicked(MouseEvent me){
if(me.getSource() == b0) tx1.setText(tx1.getText() + "0");
if(me.getSource() == b1) tx1.setText(tx1.getText() + "1");
.
.
//Y así para cada botón
}
Los demás pueden quedar en blanco:
public void mouseEntered(MouseEvent me){;}
Igual el Listener que debes registrar para los Botones será el MouseListener:
b0.addMouseListener(this);
b1.addMouseListener(this);
.
.
.
Lo demás es controlar la operación a realizar, etc.
Espero te sirva, si tienes más dudas me avisas SIN FINALIZAR la pregunta, de lo contrario pues listo ...
Suerte !
Rogers R.
*Una pregunta mas, en la Calculadora como puedo hacer para que esta obtenga el segundo numero, en este caso "y".
Esto es lo único que no se como lograrlo. Gracias por tu tiempo y tu ayuda.
Lo mismo que la x:
y=Double.parseDouble(tx1.getText());
Sólo que debes controlar si ya existe x y el tipo de operación a realizar, tendrás que hacerlo en los botones de operacions (+, -, *, etc) y el botón de ejecución (=).
Creo que es todo, si tienes más dudas me avisas SIN FINALIZAR la pregunta, de lo contrario pues listo ...
Suerte !
Rogers R.
Solo tengo una duda más en que parte podría obtener la variable "Y", ya que e tratado de ponerla en diferentes partes pero no he conseguido ningún resultado aun, espero me puedas ayudar un poco más, gracias por tu tiempo y un saludo.(Podrías darme algún ejemplo de este tipo Gracias)
Dame una dirección de Correo Electrónico y te envío el Código de una Calculadora sencilla para que lo estudies.
Suerte !
Rogers R.
*Gracias por tu tiempo, puedes mandarlo a:
[email protected]
[email protected]
Vía e-mail te envié el archivo...
Suerte !
Rogers R.
Respuesta
1
¿Exactamente qué es lo que no te funciona?
STEVEN.
*El problema que tengo creo que es el guardar la segunda variable para efectuar la operacion, ya que no se como pueda hacer para efectuar la operacion. Con dos variables "x" y "y".
Este es el nuevo código, le encontré pequeños problemas, en general estaba bien, ya podrás verificar los cambios que le hice y las variables nuevas que creé.
Cópialo, compílalo y córrelo, si tienes alguna otra pregunta no dudes en hacérmela.
STEVEN.
import java.awt.*;
import java.awt.event.*;
public class Calculadora implements ActionListener {
Frame frame;
TextField tx1;
Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,bMas,bMenos,bPor,bEntre,bPunto;
Button bIgual,Ac,bPorciento,bRaiz,bCuadrado;
boolean bp=false;
boolean bandera=true;
double x=0,y=0;
char z;
char operador;
char teclaAnterior;
public Calculadora() {
frame=new Frame();
frame.setLayout(new FlowLayout());
tx1=new TextField(50);
b0=new Button("0");
b0.addActionListener(this);
b1=new Button("1");
b1.addActionListener(this);
b2=new Button("2");
b2.addActionListener(this);
b3=new Button("3");
b3.addActionListener(this);
b4=new Button("4");
b4.addActionListener(this);
b5=new Button("5");
b5.addActionListener(this);
b6=new Button("6");
b6.addActionListener(this);
b7=new Button("7");
b7.addActionListener(this);
b8=new Button("8");
b8.addActionListener(this);
b9=new Button("9");
b9.addActionListener(this);
bMas=new Button("+");
bMas.addActionListener(this);
bMenos=new Button("-");
bMenos.addActionListener(this);
bPor=new Button("*");
bPor.addActionListener(this);
bEntre=new Button("/");
bEntre.addActionListener(this);
bPunto=new Button(".");
bPunto.addActionListener(this);
bIgual=new Button("=");
bIgual.addActionListener(this);
Ac=new Button("AC");
Ac.addActionListener(this);
bPorciento=new Button("%");
bPorciento.addActionListener(this);
bRaiz=new Button("Raiz Cuadrada");
bRaiz.addActionListener(this);
bCuadrado=new Button("x*x");
bCuadrado.addActionListener(this);
frame.add(tx1);
frame.add(b0);
frame.add(b1);
frame.add(b2);
frame.add(b3);
frame.add(b4);
frame.add(b5);
frame.add(b6);
frame.add(b7);
frame.add(b8);
frame.add(b9);
frame.add(bMas);
frame.add(bMenos);
frame.add(bPor);
frame.add(bEntre);
frame.add(bPunto);
frame.add(bIgual);
frame.add(Ac);
frame.add(bPorciento);
frame.add(bRaiz);
frame.add(bCuadrado);
frame.setSize(400,120);
frame.show();
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
try {
System.exit(0);
}
catch(Exception ex) {}
}
});
}
public void actionPerformed(ActionEvent e) {
char tecla;
tecla=e.getActionCommand().charAt(0);
if (Character.isDigit(tecla)) {
if (Character.isDigit(teclaAnterior)) {
tx1.setText(tx1.getText()+tecla);
}
else {
if (teclaAnterior != '.') {
tx1.setText("");
tx1.setText(String.valueOf(tecla));
}
else
tx1.setText(tx1.getText()+tecla);
}
}
else if (tecla=='.') {
if (!bp){
tx1.setText(tx1.getText()+tecla);
bp=true;
}
}
else if(tecla=='A') {
tx1.setText("");
bp=false;
x=0;
y=0;
bandera=true;
bp=false;
}
else if(tecla=='R') {
x=Double.parseDouble(tx1.getText());
x=Math.sqrt(x);
tx1.setText(String.valueOf(x));
}
else if(tecla=='x') {
x=Double.parseDouble(tx1.getText());
x=Math.pow(x,2);
tx1.setText(String.valueOf(x));
}
else if(tecla=='=') {
y=Double.parseDouble(tx1.getText());
Reduce();
tx1.setText(String.valueOf(x));
x=0;
y=0;
}
else if(tecla=='+'||tecla=='-'||tecla=='*'||tecla=='/'||tecla=='%') {
x=Double.parseDouble(tx1.getText());
operador = tecla;
}
else if(bandera) {
bandera=false;
x=Double.parseDouble(tx1.getText());
}
else
y=0;
z=tecla;
bandera=true;
bp=false;
teclaAnterior = tecla;
}
public static void main(String arg[]) {
Calculadora Cal=new Calculadora();
}
public void Reduce() {
switch(operador){
case '+':x+=y;
break;
case '-':x-=y;
break;
case '*':x*=y;
break;
case '/':x/=y;
break;
case '%':x=x*y/100;
break;
}
}
}
Respuesta
1
No tengo ningun compilador para ver donde se da el error, a simple vista está todo en correcto estado. No obstante intenta ponerle las llaves a los ELSE por si acaso e intenta depurarlo paso a paso

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas