I try add this code(below) after "else if(token.equals("*"))" in PostfixEvaluator.java but it doesn't work like exponent. Can you help me to figure it out what is the right code for exponent.
else if(token.equals("^"))
{
val1 = Integer.parseInt(stack.pop().toString());
val2 = Integer.parseInt(stack.pop().toString());
result = val2 ^ val1;
stack.push(new Integer(result));
}
And lastly, Can you point to me which part of the code where I can see the code in "spacing",
like: 1_2_3_*_+ where "_" is spacing or simply 1 2 3 * +.
Why the program understands the spacing? Which part of the code?
Thanks for reading...
Here's the entire code:
import javax.swing.*;
public class StackArray
{
private Object stack[];
private int sizeIndex = 5;
private int topPtr;
public StackArray()
{
stack = new Object[sizeIndex];
}
public void push(Object stackItem)
{
if(!isFull())
{
stack[topPtr] = stackItem;
topPtr++;
}
else
{
JOptionPane.showMessageDialog(null,"Stack is Full!","Error",JOptionPane.ERROR_MESSAGE);
}
}
public Object pop()
{
Object x = null;
if(!isEmpty())
{
x = stack[--topPtr];
stack[topPtr] = null;
}
return x;
}
public Object top()
{
Object ts = null;
if(!isEmpty())
{
ts = stack[topPtr - 1];
}
return ts;
}
public boolean isEmpty()
{
return topPtr == 0;
}
public boolean isFull()
{
return topPtr == sizeIndex;
}
public boolean contains(Object stackItem)
{
boolean contains = false;
if(!isEmpty())
{
for(int i = 0; i < sizeIndex; i++)
{
if(stack[i].equals(stackItem))
{
contains = true;
break;
}
}
}
return contains;
}
public String toString()
{
StringBuffer display = new StringBuffer();
display.append("{");
for(int i = 0; i< sizeIndex; i++)
{
if(stack[i] != null)
{
display.append(stack[i]);
if( i < topPtr - 1)
{
display.append(",");
}
}
}
display.append("}");
return display.toString();
}
}
=========================================
public class Numeral
{
public static boolean isOperand(String o)
{
boolean operand = true; //why boolean and why true?
for(int i = 0; i < o.length(); i++) //purpose of this: Why o.length and i++?
{
char c = o.charAt(i);
if(!Character.isDigit(c)) //purpose of this and how to read this?
{
operand = false; //Why operand is false?
break;
}
}
return operand; //Why return to operand?
}
public static boolean isOperator(String o)
{
return(o.equals("+") || o.equals("*") || //Why return to this?
o.equals("-") || o.equals("/"));
}
}
==========================================
import javax.swing.*;
import java.util.*;
public class PostfixEvaluator
{
StackArray stack = new StackArray();
StringTokenizer tok;
private int val1,val2;
private int result;
public PostfixEvaluator(String postfix)
{
tok = new StringTokenizer(postfix);
while(tok.hasMoreElements())
{
String token = tok.nextToken();
if(Numeral.isOperand(token))
{
stack.push(token);
}
else if (token.equals("a") || token.equals("b") || token.equals("c"))
{
JOptionPane.showMessageDialog(null,"Invalid Input","Error",JOptionPane.ERROR_MESSAGE);
}
else if(Numeral.isOperator(token))
{
if(token.equals("+"))
{
val1 = Integer.parseInt(stack.pop().toString());
val2 = Integer.parseInt(stack.pop().toString());
result = val1 + val2;
stack.push(new Integer(result));
}
else if(token.equals("-"))
{
val1 = Integer.parseInt(stack.pop().toString());
val2 = Integer.parseInt(stack.pop().toString());
result = val2 - val1;
stack.push(new Integer(result));
}
else if(token.equals("*"))
{
val1 = Integer.parseInt(stack.pop().toString());
val2 = Integer.parseInt(stack.pop().toString());
result = val1 * val2;
stack.push(new Integer(result));
}
else if(token.equals("/"))
{
val1 = Integer.parseInt(stack.pop().toString());
val2 = Integer.parseInt(stack.pop().toString());
result = val2 / val1;
stack.push(new Integer(result));
}
}
}
}
public String getResult()
{
return String.valueOf(stack.top());
}
}
===========================================
This is the runner.
This is the runner.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Postfix
{
JTextField TxtPostfix = new JTextField(15);
JTextField TxtResult = new JTextField(15);
private String inputString = null;
private JFrame frame;
private JLabel label;
private JPanel boxLayout,panel1,panel2,panel3;
JButton eval = new JButton("Evaluate");
JButton clear = new JButton("Clear");
JButton sample = new JButton("Ex. 2 3 4 * + ");
private Font font;
public Postfix()
{
boxLayout = new JPanel();
font = new Font("Serif",Font.BOLD,12);
//For postfix notation
panel1 = new JPanel(new FlowLayout(FlowLayout.CENTER,5,0));
panel1.add(label = new JLabel("Postfix : "));
panel1.add(TxtPostfix);
label.setFont(font);
label.setPreferredSize(new Dimension(49,16));
label.setHorizontalAlignment(JLabel.RIGHT);
panel2 = new JPanel(new FlowLayout(FlowLayout.CENTER,5,0));
panel2.add(label = new JLabel("Result : "));
panel2.add(TxtResult);
panel3 = new JPanel(new FlowLayout(FlowLayout.CENTER,5,0));
panel3.add(eval);
panel3.add(clear);
panel3.add(sample);
label.setFont(font);
label.setForeground(Color.red);
label.setPreferredSize(new Dimension(49,16));
label.setHorizontalAlignment(JLabel.RIGHT);
TxtResult.setEditable(false);
}
public Container createContent()
{
eval.addActionListener ( new ActionListener () {
public void actionPerformed ( ActionEvent e) {
PostfixEvaluator p;
p = new PostfixEvaluator(TxtPostfix.getText());
TxtResult.setText(p.getResult());
}
});
clear.addActionListener ( new ActionListener () {
public void actionPerformed ( ActionEvent e) {
TxtPostfix.setText("");
TxtResult.setText("");
}
});
sample.addActionListener ( new ActionListener () {
public void actionPerformed ( ActionEvent e) {
TxtPostfix.setText("2 3 4 * +");
}
});
boxLayout.setOpaque(true);
boxLayout.add(panel1);
boxLayout.add(Box.createRigidArea(new Dimension(0,5)));
boxLayout.add(panel2);
boxLayout.add(Box.createRigidArea(new Dimension(0,5)));
boxLayout.add(panel3);
boxLayout.add(Box.createRigidArea(new Dimension(0,5)));
JPanel layoutPanel = new JPanel();
layoutPanel.add(boxLayout);
return layoutPanel;
}
public void showGUI()
{
frame = new JFrame("Midterm Project");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(createContent());
frame.pack();
frame.setVisible(true);
frame.setResizable(false);
}
public static void main(String[] args)
{
Runnable doRun = new Runnable(){
public void run()
{
new Postfix().showGUI();
}
};
javax.swing.SwingUtilities.invokeLater(doRun);
}
}