Can anyone please help me get this program to display parentheses ? I also need
ID: 3681444 • Letter: C
Question
Can anyone please help me get this program to display parentheses? I also need a space between each integer, operator and parentheses. Example ( 2 + 3 ) * 5. Also, the operators (+,-,/,*) are being displayed on the calculator which I need them to do not just perform the calculations. The calculator needs to know how to perform order of operations since parentheses are an option. Lastly, I would like the first row of the calculator to be for calculation purposes only. Currently, there is only one box to display numbers being calculated. I have provided a GUI example of how I want it to look as opposed to how it appears now. Please modify the program below.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Calc extends Applet
implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
String msg=" ";
int v1,v2,result;
TextField t1;
Button b[]=new Button[10];
Button add,sub,mul,div,clear,mod,EQ,left,right;
char OP;
public void init()
{
Color k=new Color(120,89,90);
setBackground(k);
t1=new TextField(10);
GridLayout gl=new GridLayout(4,5);
setLayout(gl);
for(int i=0;i<10;i++)
{
b[i]=new Button(""+i);
}
add=new Button("add");
sub=new Button("sub");
mul=new Button("mul");
div=new Button("div");
mod=new Button("mod");
left=new Button("(");
right=new Button(")");
clear=new Button("clear");
EQ=new Button("EQ");
t1.addActionListener(this);
add(t1);
for(int i=0;i<10;i++)
{
add(b[i]);
}
add(add);
add(sub);
add(mul);
add(div);
add(mod);
add(left);
add(right);
add(clear);
add(EQ);
for(int i=0;i<10;i++)
{
b[i].addActionListener(this);
}
add.addActionListener(this);
sub.addActionListener(this);
mul.addActionListener(this);
div.addActionListener(this);
mod.addActionListener(this);
left.addActionListener(this);
right.addActionListener(this);
clear.addActionListener(this);
EQ.addActionListener(this);
}
public void actionPerformed(ActionEvent ae)
{
String str=ae.getActionCommand();
char ch=str.charAt(0);
if ( Character.isDigit(ch))
t1.setText(t1.getText()+str);
else
if(str.equals("add"))
{
v1=Integer.parseInt(t1.getText());
OP='+';
t1.setText("");
}
else if(str.equals("sub"))
{
v1=Integer.parseInt(t1.getText());
OP='-';
t1.setText("");
}
else if(str.equals("mul"))
{
v1=Integer.parseInt(t1.getText());
OP='*';
t1.setText("");
}
else if(str.equals("div"))
{
v1=Integer.parseInt(t1.getText());
OP='/';
t1.setText("");
}
else if(str.equals("mod"))
{
v1=Integer.parseInt(t1.getText());
OP='%';
t1.setText("");
}
else if(str.equals("left"))
{
v1=Integer.parseInt(t1.getText());
OP='(';
t1.setText("");
}
else if(str.equals("right"))
{
v1=Integer.parseInt(t1.getText());
OP=')';
t1.setText("");
}
if(str.equals("EQ"))
{
v2=Integer.parseInt(t1.getText());
if(OP=='+')
result=v1+v2;
else if(OP=='-')
result=v1-v2;
else if(OP=='*')
result=v1*v2;
else if(OP=='/')
result=v1/v2;
else if(OP=='%')
result=v1%v2;
t1.setText(""+result);
}
if(str.equals("clear"))
{
t1.setText("");
}
}
}
Explanation / Answer
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.Stack;
public class Calc extends Applet implements ActionListener {
private static final long serialVersionUID = 1L;
String msg = " ";
int v1, v2, result;
TextField t1;
Button b[] = new Button[10];
Button add, sub, mul, div, clear, mod, EQ, left, right;
char OP;
boolean resetflag = false;
public void init() {
Color k = new Color(120, 89, 90);
setBackground(k);
t1 = new TextField(10);
GridLayout gl = new GridLayout(4, 5);
setLayout(gl);
for (int i = 0; i < 10; i++) {
b[i] = new Button("" + i);
}
add = new Button("add");
sub = new Button("sub");
mul = new Button("mul");
div = new Button("div");
mod = new Button("mod");
left = new Button("(");
right = new Button(")");
clear = new Button("clear");
EQ = new Button("EQ");
t1.addActionListener(this);
add(t1);
for (int i = 0; i < 10; i++) {
add(b[i]);
}
add(add);
add(sub);
add(mul);
add(div);
add(mod);
add(left);
add(right);
add(clear);
add(EQ);
for (int i = 0; i < 10; i++) {
b[i].addActionListener(this);
}
add.addActionListener(this);
sub.addActionListener(this);
mul.addActionListener(this);
div.addActionListener(this);
mod.addActionListener(this);
left.addActionListener(this);
right.addActionListener(this);
clear.addActionListener(this);
EQ.addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
if (resetflag == true) {
t1.setText("");
resetflag = false;
}
String str = ae.getActionCommand();
char ch = str.charAt(0);
if (Character.isDigit(ch))
t1.setText(t1.getText() + str);
else if (str.equals("add")) {
t1.setText(t1.getText() + " + ");
} else if (str.equals("sub")) {
t1.setText(t1.getText() + " - ");
} else if (str.equals("mul")) {
t1.setText(t1.getText() + " x ");
} else if (str.equals("div")) {
t1.setText(t1.getText() + " / ");
} else if (str.equals("mod")) {
t1.setText(t1.getText() + " % ");
} else if (str.equals("(")) {
t1.setText(t1.getText() + " ( ");
} else if (str.equals(")")) {
t1.setText(t1.getText() + " ) ");
}
if (str.equals("EQ")) {
String temp = t1.getText();
result = evaluate(temp);
t1.setText("" + result);
resetflag = true;
}
if (str.equals("clear")) {
t1.setText("");
}
}
public static int evaluate(String expression) {
char[] tokens = expression.toCharArray();
Stack<Integer> values = new Stack<Integer>();
Stack<Character> ops = new Stack<Character>();
for (int i = 0; i < tokens.length; i++) {
if (tokens[i] == ' ')
continue;
if (tokens[i] >= '0' && tokens[i] <= '9') {
StringBuffer sbuf = new StringBuffer();
while (i < tokens.length && tokens[i] >= '0'
&& tokens[i] <= '9')
sbuf.append(tokens[i++]);
values.push(Integer.parseInt(sbuf.toString()));
}
else if (tokens[i] == '(')
ops.push(tokens[i]);
else if (tokens[i] == ')') {
while (ops.peek() != '(')
values.push(applyOp(ops.pop(), values.pop(), values.pop()));
ops.pop();
}
else if (tokens[i] == '+' || tokens[i] == '-' || tokens[i] == 'x'
|| tokens[i] == '/' || tokens[i] == '%') {
while (!ops.empty() && hasPrecedence(tokens[i], ops.peek()))
values.push(applyOp(ops.pop(), values.pop(), values.pop()));
ops.push(tokens[i]);
}
}
while (!ops.empty())
values.push(applyOp(ops.pop(), values.pop(), values.pop()));
return values.pop();
}
public static boolean hasPrecedence(char op1, char op2) {
if (op2 == '(' || op2 == ')')
return false;
if ((op1 == 'x' || op1 == '/' || op1 == '%')
&& (op2 == '+' || op2 == '-'))
return false;
else
return true;
}
public static int applyOp(char op, int b, int a) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case 'x':
return a * b;
case '%':
return a % b;
case '/':
if (b == 0)
throw new UnsupportedOperationException("Cannot divide by zero");
return a / b;
}
return 0;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.