parent
298c13e625
commit
ba385756b2
@ -1,129 +0,0 @@
|
|||||||
import java.util.Stack;
|
|
||||||
|
|
||||||
public class Computer {
|
|
||||||
public double result;//结果
|
|
||||||
public Stack<Character> dataItem;//参与运算数据项
|
|
||||||
public Stack<Double> tempResult;//中间结果
|
|
||||||
public Stack<Character> operator;//运算符号
|
|
||||||
|
|
||||||
public Computer(){
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void init(){//初始化
|
|
||||||
dataItem=new Stack<Character>();
|
|
||||||
tempResult=new Stack<Double>();
|
|
||||||
dataItem.push('0');
|
|
||||||
operator=new Stack<Character>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getResult() {
|
|
||||||
double endItem=0;
|
|
||||||
if(dataItem.empty()){
|
|
||||||
endItem=tempResult.peek();
|
|
||||||
}else{
|
|
||||||
endItem=computerDataItem();
|
|
||||||
}
|
|
||||||
if(operator.empty()){
|
|
||||||
result=endItem;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
char c=operator.peek();
|
|
||||||
if (c == '+') {
|
|
||||||
result=tempResult.peek()+endItem;
|
|
||||||
}else if (c == '-') {
|
|
||||||
result=tempResult.peek()-endItem;
|
|
||||||
}else if (c == '*') {
|
|
||||||
result=tempResult.peek()*endItem;
|
|
||||||
}else if (c == '/') {
|
|
||||||
result=tempResult.peek()/endItem;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setDataItem(char c) {
|
|
||||||
//数据项中不包含小数点时才可以添加小数点
|
|
||||||
if(c!='.')
|
|
||||||
dataItem.push(c);
|
|
||||||
else {
|
|
||||||
if(!dataItem.contains('.'))
|
|
||||||
dataItem.push(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getTempResult() {
|
|
||||||
double t=0;
|
|
||||||
if(tempResult.empty()){
|
|
||||||
t=computerDataItem();
|
|
||||||
}else{
|
|
||||||
t=tempResult.peek();
|
|
||||||
}
|
|
||||||
return t;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public char getOperator() {
|
|
||||||
if(operator.empty()){
|
|
||||||
return '\0';
|
|
||||||
}
|
|
||||||
return operator.peek();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOperator(char p) {
|
|
||||||
if(dataItem.empty()){
|
|
||||||
operator.clear();//防止重复输入运算符
|
|
||||||
operator.push(p);//保留用户最后确定的运算符
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(operator.empty()){
|
|
||||||
operator.push(p);
|
|
||||||
double m=computerDataItem();//计算数据项
|
|
||||||
dataItem.removeAllElements();//清空数据项中的数字
|
|
||||||
tempResult.push(m);//临时结果压入tempResult
|
|
||||||
}else{
|
|
||||||
double m1=computerDataItem();
|
|
||||||
dataItem.removeAllElements();
|
|
||||||
char c= operator.pop();//弹出已有的运算符
|
|
||||||
double t=tempResult.pop();//弹出临时结果
|
|
||||||
if (c == '+') {
|
|
||||||
t=t+m1;
|
|
||||||
}else if (c == '-') {
|
|
||||||
t=t-m1;
|
|
||||||
}else if (c == '*') {
|
|
||||||
t=t*m1;
|
|
||||||
}else if (c == '/') {
|
|
||||||
t=t/m1;
|
|
||||||
}
|
|
||||||
tempResult.push(t);//把新的结果压入tempResult
|
|
||||||
operator.push(p);//把新的运算符压入operator
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public double computerDataItem(){//计算出数据项的double型结果
|
|
||||||
if(dataItem.empty()){
|
|
||||||
return tempResult.peek();
|
|
||||||
}
|
|
||||||
StringBuffer sb=new StringBuffer();
|
|
||||||
double doubleData=0;
|
|
||||||
for (int i = 0; i < dataItem.size(); i++) {
|
|
||||||
sb.append(dataItem.get(i));//获取堆栈中的数字但不弹栈
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
doubleData=Double.parseDouble(sb.toString());
|
|
||||||
}catch (NumberFormatException e){
|
|
||||||
doubleData=0;
|
|
||||||
}
|
|
||||||
return doubleData;
|
|
||||||
}
|
|
||||||
public void backspace(){
|
|
||||||
if(dataItem.size()>=1){
|
|
||||||
dataItem.pop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initMath(MathComputer mc){
|
|
||||||
mc.handle(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in new issue