ADD file via upload

main
pvgyf6hkf 1 year ago
parent 7d1a0b4597
commit 75a1399fa8

@ -0,0 +1,129 @@
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…
Cancel
Save