我正在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