Need help making the calculator work properly. This example will explain the pro
ID: 3625337 • Letter: N
Question
Need help making the calculator work properly.This example will explain the problem:
Run Calc
Enter "123"
Enter "-"
Enter "456"
Enter "="
Outputs "-333" //Works great so far, here is the problem
Enter"789"
Displays"-333.0789"
This is an error, it should reset into a new calculation when "789" is entered and the screen thus should be blank when "789" is entetred. Help is greatly appreciated:
source code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class ActionTest
{
static JButton B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20;
static JTextField tf, operand;
static Stack stack=new Stack();
static char ch;
static class ButtonActionListener implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
if (ae.getSource() == tf)
System.out.println("Text field contains: " + tf.getText());
String s= ae.getActionCommand().toString();
if(s!="+/-" && s!="+" && s!= "-"&& s!="*" && s!="/" && s!="=" && s!="BSKP" && s!="CE" && s!="C")
{
if(tf.getText().equals("0") || tf.getText().equals(""))
tf.setText(s);
else
tf.setText(tf.getText()+s);
}
else if(!s.equals("="))
{
double num=Double.parseDouble(tf.getText());
stack.push(num);
tf.setText("");
ch=s.charAt(0);
}
else if(s.equals("C"))
{
stack.clear();
}
else if(s.equals("CE"))
{
stack.pop();
}
else if(s.equals("="))
{
double num=Double.parseDouble(tf.getText());
stack.push(num);
double d1=stack.pop();
double d2=stack.pop();
double result=0;
switch(ch)
{
case '+':
result=d1+d2;
break;
case '-':
result=d2-d1;
break;
case '*':
result=d1*d2;
break;
case '/':
result=d2/d1;
break;
}
tf.setText(result+"");
stack.push(result);
}
}
}
public static void main(String[] args)
{
JFrame frm = new JFrame("Calculator");
JLabel lbl = new JLabel("Hello!");
Container contentPane = frm.getContentPane();
contentPane.setLayout(new FlowLayout());
ButtonActionListener BAL = new ButtonActionListener() ;
frm.getContentPane().add(lbl);
tf = new JTextField("0", 27);
tf.setHorizontalAlignment(JTextField.RIGHT);
tf.addActionListener(BAL);
contentPane.add(tf);
frm.pack();
frm.setSize(325,270);
frm.setResizable(false);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
B1= new JButton("BSKP");
contentPane.add(B1);
B1.addActionListener(BAL);
B2= new JButton("CE");
contentPane.add(B2);
B2.addActionListener(BAL);
B3= new JButton("C");
contentPane.add(B3);
B3.addActionListener(BAL);
B4= new JButton("+/-");
contentPane.add(B4);
B4.addActionListener(BAL);
B5= new JButton("7");
contentPane.add(B5);
B5.addActionListener(BAL);
B6= new JButton("8");
contentPane.add(B6);
B6.addActionListener(BAL);
B7= new JButton("9");
contentPane.add(B7);
B7.addActionListener(BAL);
B8= new JButton("/");
contentPane.add(B8);
B8.addActionListener(BAL);
B9= new JButton("4");
contentPane.add(B9);
B9.addActionListener(BAL);
B10= new JButton("5");
contentPane.add(B10);
B10.addActionListener(BAL);
B11= new JButton("6");
contentPane.add(B11);
B11.addActionListener(BAL);
B12= new JButton("*");
contentPane.add(B12);
B12.addActionListener(BAL);
B13= new JButton("1");
contentPane.add(B13);
B13.addActionListener(BAL);
B14= new JButton("2");
contentPane.add(B14);
B14.addActionListener(BAL);
B15= new JButton("3");
contentPane.add(B15);
B15.addActionListener(BAL);
B16= new JButton("-");
contentPane.add(B16);
B16.addActionListener(BAL);
B17= new JButton("0");
contentPane.add(B17);
B17.addActionListener(BAL);
B18= new JButton("=");
contentPane.add(B18);
B18.addActionListener(BAL);
B19= new JButton(".");
contentPane.add(B19);
B19.addActionListener(BAL);
B20= new JButton("+");
contentPane.add(B20);
B20.addActionListener(BAL);
B1.setPreferredSize(new Dimension(70, 30));
B2.setPreferredSize(new Dimension(70, 30));
B3.setPreferredSize(new Dimension(70, 30));
B4.setPreferredSize(new Dimension(70, 30));
B5.setPreferredSize(new Dimension(70, 30));
B6.setPreferredSize(new Dimension(70, 30));
B7.setPreferredSize(new Dimension(70, 30));
B8.setPreferredSize(new Dimension(70, 30));
B9.setPreferredSize(new Dimension(70, 30));
B10.setPreferredSize(new Dimension(70, 30));
B11.setPreferredSize(new Dimension(70, 30));
B12.setPreferredSize(new Dimension(70, 30));
B13.setPreferredSize(new Dimension(70, 30));
B14.setPreferredSize(new Dimension(70, 30));
B15.setPreferredSize(new Dimension(70, 30));
B16.setPreferredSize(new Dimension(70, 30));
B17.setPreferredSize(new Dimension(70, 30));
B18.setPreferredSize(new Dimension(70, 30));
B19.setPreferredSize(new Dimension(70, 30));
B20.setPreferredSize(new Dimension(70, 30));
}
}
Explanation / Answer
Added a better check for whether to reset text field.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class ActionTest
{
static JButton B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20;
static JTextField tf, operand;
static Stack stack=new Stack();
static char ch;
static class ButtonActionListener implements ActionListener
{
private boolean reset = true;
public void actionPerformed(ActionEvent ae)
{
if (ae.getSource() == tf)
System.out.println("Text field contains: " + tf.getText());
String s= ae.getActionCommand().toString();
if(s!="+/-" && s!="+" && s!= "-"&& s!="*" && s!="/" && s!="=" && s!="BSKP" && s!="CE" && s!="C")
{
if(reset)
{
tf.setText(s);
reset = false;
}
else
tf.setText(tf.getText()+s);
}
else if(!s.equals("="))
{
double num=Double.parseDouble(tf.getText());
stack.push(num);
tf.setText("");
ch=s.charAt(0);
}
else if(s.equals("C"))
{
stack.clear();
}
else if(s.equals("CE"))
{
stack.pop();
}
else if(s.equals("="))
{
double num=Double.parseDouble(tf.getText());
stack.push(num);
double d1=(Double)stack.pop();
double d2=(Double)stack.pop();
double result=0;
switch(ch)
{
case '+':
result=d1+d2;
break;
case '-':
result=d2-d1;
break;
case '*':
result=d1*d2;
break;
case '/':
result=d2/d1;
break;
}
tf.setText(result+"");
//stack.push(result);
reset = true;
}
}
}
public static void main(String[] args)
{
JFrame frm = new JFrame("Calculator");
JLabel lbl = new JLabel("Hello!");
Container contentPane = frm.getContentPane();
contentPane.setLayout(new FlowLayout());
ButtonActionListener BAL = new ButtonActionListener() ;
frm.getContentPane().add(lbl);
tf = new JTextField("0", 27);
tf.setHorizontalAlignment(JTextField.RIGHT);
tf.addActionListener(BAL);
contentPane.add(tf);
frm.pack();
frm.setSize(325,270);
frm.setResizable(false);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
B1= new JButton("BSKP");
contentPane.add(B1);
B1.addActionListener(BAL);
B2= new JButton("CE");
contentPane.add(B2);
B2.addActionListener(BAL);
B3= new JButton("C");
contentPane.add(B3);
B3.addActionListener(BAL);
B4= new JButton("+/-");
contentPane.add(B4);
B4.addActionListener(BAL);
B5= new JButton("7");
contentPane.add(B5);
B5.addActionListener(BAL);
B6= new JButton("8");
contentPane.add(B6);
B6.addActionListener(BAL);
B7= new JButton("9");
contentPane.add(B7);
B7.addActionListener(BAL);
B8= new JButton("/");
contentPane.add(B8);
B8.addActionListener(BAL);
B9= new JButton("4");
contentPane.add(B9);
B9.addActionListener(BAL);
B10= new JButton("5");
contentPane.add(B10);
B10.addActionListener(BAL);
B11= new JButton("6");
contentPane.add(B11);
B11.addActionListener(BAL);
B12= new JButton("*");
contentPane.add(B12);
B12.addActionListener(BAL);
B13= new JButton("1");
contentPane.add(B13);
B13.addActionListener(BAL);
B14= new JButton("2");
contentPane.add(B14);
B14.addActionListener(BAL);
B15= new JButton("3");
contentPane.add(B15);
B15.addActionListener(BAL);
B16= new JButton("-");
contentPane.add(B16);
B16.addActionListener(BAL);
B17= new JButton("0");
contentPane.add(B17);
B17.addActionListener(BAL);
B18= new JButton("=");
contentPane.add(B18);
B18.addActionListener(BAL);
B19= new JButton(".");
contentPane.add(B19);
B19.addActionListener(BAL);
B20= new JButton("+");
contentPane.add(B20);
B20.addActionListener(BAL);
B1.setPreferredSize(new Dimension(70, 30));
B2.setPreferredSize(new Dimension(70, 30));
B3.setPreferredSize(new Dimension(70, 30));
B4.setPreferredSize(new Dimension(70, 30));
B5.setPreferredSize(new Dimension(70, 30));
B6.setPreferredSize(new Dimension(70, 30));
B7.setPreferredSize(new Dimension(70, 30));
B8.setPreferredSize(new Dimension(70, 30));
B9.setPreferredSize(new Dimension(70, 30));
B10.setPreferredSize(new Dimension(70, 30));
B11.setPreferredSize(new Dimension(70, 30));
B12.setPreferredSize(new Dimension(70, 30));
B13.setPreferredSize(new Dimension(70, 30));
B14.setPreferredSize(new Dimension(70, 30));
B15.setPreferredSize(new Dimension(70, 30));
B16.setPreferredSize(new Dimension(70, 30));
B17.setPreferredSize(new Dimension(70, 30));
B18.setPreferredSize(new Dimension(70, 30));
B19.setPreferredSize(new Dimension(70, 30));
B20.setPreferredSize(new Dimension(70, 30));
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.