您的位置:首页 > 编程语言 > Java开发

java 四则运算

2013-11-28 21:47 288 查看
package algorithms;

import java.util.Stack;

public class Siping1 {
//给字符串模拟四则运算,例如输入字符串"1+(2-1)*3=",输出4
private Stack<String> ss=new Stack<String>();
/*
* 算出括号里面的值
*/
public Integer caculateString(String cstring){
char[] strs=cstring.toCharArray();
Stack<String> stack=new Stack<String>();
for(int i=0;i<strs.length;i++){
String stackStr=String.valueOf(strs[i]);
if(")".equals(stackStr)){
StringBuffer sb=new StringBuffer();
while(!"(".equals(stack.peek())){
String s1=stack.pop();
sb.insert(0, s1);
}
stack.pop();
//System.out.println(sb.toString());
Integer s=caculate(sb.toString());
stack.push(s.toString());
}else{
stack.push(stackStr);
}
}
StringBuffer sb1=new StringBuffer();

while(!stack.empty()){
String s1=stack.pop();
sb1.insert(0, s1);

}
//System.out.println(sb1);
return caculate(sb1.toString());
}
/*
* 还可以用逆波兰表达式
*/
public Integer caculate(String cstring){
//用两个栈来保存运算符和运算数字
Stack<String> stack=new Stack<String>();
Stack<Integer> stk=new Stack<Integer>();
char[] str=cstring.toCharArray();

StringBuffer sb=new StringBuffer();
for(int i=0;i<str.length;i++){
String string=String.valueOf(str[i]);

if("+-*/".contains(string)){
if(!stack.empty()){
if("+-".contains(string)){
stk.push(caculate(stk.pop(),Integer.valueOf(sb.toString()),stack.pop()));
stack.push(string);
}else{
if("+-".contains(stack.peek())){//表示前面的符号是+-,当前是*/的情况
stack.push(string);//将符号放入栈
stk.push(Integer.valueOf(sb.toString()));

}else{
//表示前面是乘除的情况,不论当前是加减乘除
stk.push(caculate(stk.pop(),Integer.valueOf(sb.toString()),string));
stack.push(string);

}
}
}else{
stack.push(string);
stk.push(Integer.valueOf(sb.toString()));
}
sb=new StringBuffer();
}else{
sb.append(string);
}
}

stk.push(caculate(stk.pop(),Integer.valueOf(sb.toString()),stack.pop()));

while(!stack.empty()){
Integer a=stk.pop();
Integer b=stk.pop();
stk.push(caculate(b,a,stack.pop()));
}
return stk.pop();
}
public Integer caculate(Integer op1,Integer op2,String op){
switch(op.charAt(0)){
case '+':return op1+op2;
case '-':return op1-op2;
case '*':return op1*op2;
case '/':return op1/op2;
default:return null;
}
//return null;
}
public static void main(String[] args){
Siping1 s=new Siping1();
//Integer a=Integer.valueOf("123");
//Stack st=new Stack();
//System.out.println(st.empty());
System.out.println(s.caculateString("12+3*(4+2)-7*2"));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: