📄 calculator.java
字号:
/*****************计算器*********************
*实现了小数的加减乘除,乘方,取模,括号
*Write by zhangyi 2006-10*/
import java.io.*;
import java.util.Stack;
public class Calculator{
//进栈后的优先级
private int isp(char a){
int x=-1;
switch(a){
// case '=': x=0; break;//???
case '(': x=1; break;
case '+':
case '-': x=3; break;
case '*':
case '/':
case '%': x=5; break;
case '^': x=7; break;
case ')': x=8; break;
}
return x;
}
//进栈前的优先级
private int icp(char a){
int x=-1;
switch(a){
// case '=': x=0; break;//???
case '(': x=8; break;
case '+':
case '-': x=2; break;
case '*':
case '/':
case '%': x=4; break;
case '^': x=6; break;
case ')': x=1; break;
}
return x;
}
private double calculate(char op,double left,double right){
double result=0;
switch(op){
case '+': result=left+right;break;
case '-': result=left-right;break;
case '*': result=left*right;break;
case '/': if(right==0) System.out.println("除数为0!");
else result=left/right;break;
case '%': result=left%right;break;
case '^': result=Math.pow(left,right);break;
}
return result;
}
public void run(String exp){
Stack<Character> s=new Stack<Character>();//存操作符
s.push('=');
Stack<Double> num=new Stack<Double>();//存数字
double left,right;
char y;
StringBuffer line=new StringBuffer();
for(int i=0;i<exp.length();i++){
// 读数字
if(Character.isDigit(exp.charAt(i))||exp.charAt(i)=='.'){
line.append(exp.charAt(i));
if(!Character.isDigit(exp.charAt(i+1))&&exp.charAt(i+1)!='.'){
num.push(Double.parseDouble(line.toString()));
line=new StringBuffer();
}
}
else{//读操作符
if(exp.charAt(i)=='=') break;
else if(exp.charAt(i)==')')
for(y=(s.pop());y!='(';y=(s.pop())){
right=num.pop();
left=num.pop();
num.push(calculate(y,left,right));
}
else{
for(y=s.pop();isp(y)>icp(exp.charAt(i));y=s.pop()){
right=num.pop();
left=num.pop();
num.push(calculate(y,left,right));
}
s.push(y);s.push(exp.charAt(i));
}
}
}
while(s.peek()!='='){
y=((Character)s.pop()).charValue();
right=num.pop();
left=num.pop();
num.push(calculate(y,left,right));
}
System.out.println(num.pop());
}
public static void main(String args[]){
Calculator test=new Calculator();
String line=null;
System.out.println("键入一个表达式,以等号结尾。");
System.out.println("如:1+(2-3)*4=");
System.out.println("键入e结束");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
do{
try{
line=in.readLine();
test.run(line);
}
catch(IOException e){
System.out.println(e);
}
}while(!line.equals("e"));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -