我正在Java中为一个项目构建一个堆栈,到目前为止我已经做了简单的计算,但是我想添加括号以允许更复杂的计算。下面是目前的代码。请记住,我还没有为栈中的运算符设置优先级,并且代码还没有那么原始。任何你能给的帮助都会很棒。使用括号的堆栈计算器
import java.util.*;
public class CalcEngine {
String total = "";
int op1, op2, size, value1, value2;
char operator;
int displayValue, operand1;
boolean done = false;
Deque<Character> stack = new ArrayDeque<Character>();
ArrayList<Integer> numbers = new ArrayList<Integer>();
/**
* Create a CalcEngine instance. Initialise its state so that it is ready
* for use.
*/
public CalcEngine() {
operator = ' ';
displayValue = 0;
operand1 = 0;
}
/**
* Return the value that should currently be displayed on the calculator
* display.
*/
public String getDisplayValue() {
return (total);
}
/**
* A number button was pressed. Do whatever you have to do to handle it. The
* number value of the button is given as a parameter.
*/
public void numberPressed(int number) {
displayValue = displayValue * 10 + number;
total += number;
}
/**
* The 'plus' button was pressed.
*/
public void plus() {
operand1 = displayValue;
displayValue = 0;
operator = '+';
total += " + ";
}
/**
* The 'minus' button was pressed.
*/
public void minus() {
operand1 = displayValue;
displayValue = 0;
operator = '-';
total += " - ";
}
public void multiply() {
operand1 = displayValue;
displayValue = 0;
operator = '*';
total += " * ";
}
public void divide() {
operand1 = displayValue;
displayValue = 0;
operator = '/';
total += "/";
}
/**
* The '=' button was pressed.
*/
public void equals() {
stack();
}
/**
* The 'C' (clear) button was pressed.
*/
public void clear() {
displayValue = 0;
operand1 = 0;
total = "";
}
/**
* Return the title of this calculation engine.
*/
public String getTitle() {
return ("My Calculator");
}
/**
* Return the author of this engine. This string is displayed as it is, so
* it should say something like "Written by H. Simpson".
*/
public String getAuthor() {
return ("T.Tubbritt");
}
/**
* Return the version number of this engine. This string is displayed as it
* is, so it should say something like "Version 1.1".
*/
public String getVersion() {
return ("Ver. 1.0");
}
public boolean isNumber(String total) {
try {
int y = Integer.parseInt(total);
return true;
} catch (NumberFormatException e) {
return false;
}
}
public void stack() {
String outputStream;
StringTokenizer st = new StringTokenizer(total);
while (st.hasMoreTokens()) {
String c = st.nextToken();
if (isNumber(c)) {
numbers.add(Integer.parseInt(c));
} else {
stack.addFirst(c.charAt(0));
}
}
System.out.println(stack.getFirst());
while (stack.size() != 0) {
switch (stack.getFirst()) {
case '*':
size = numbers.size();
value1 = numbers.get(size - 1);
value2 = numbers.get(size - 2);
numbers.set(size - 2, value1 * value2);
stack.pop();
numbers.remove(size - 1);
continue;
case '+':
size = numbers.size();
value1 = numbers.get(size - 1);
value2 = numbers.get(size - 2);
numbers.set(size - 2, value1 + value2);
stack.pop();
numbers.remove(size - 1);
continue;
case '-':
size = numbers.size();
value1 = numbers.get(size - 1);
value2 = numbers.get(size - 2);
numbers.set(size - 2, value2 - value1);
stack.pop();
numbers.remove(size - 1);
continue;
}
}
total += " = " + numbers.get(size - 2);
}
}
这里有关于添加括号的具体问题吗? – digitaljoel
我只是寻找一些关于如何在代码中实现括号的建议。 – user2175076