Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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));
}
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote