java中缀转后缀_java简单实现中缀转后缀

缺点:目前只实现10以内的四则运算

学到的知识点:

StringBuffer如果想转char数组,首先转String,然后装Char

String tem1=st.toString();

char tem[]=tem1.toCharArray();

如何将字符转数字Float要使用包装类型

Float.valueOf(tem[i]-'0')

import java.nio.CharBuffer;

import java.util.Stack;

public class ZhongZhui {

static Stack stack = new Stack();

public static void main(String[] args) {

String s="5+2*(3*(2-1))";

StringBuilder out1=getLast(s);

float result= calsum(out1);

System.out.println(result);

}

public static float getSum(char op,float n1,float n2){

if(op=='+')

return n1+n2;

if(op=='-')

return n2-n1;

if(op=='*')

return n1*n2;

if(op=='/')

return n2/n1;

return 0;

}

public static float calsum(StringBuilder st){

Stack sum = new Stack();

String tem1=st.toString();

char tem[]=tem1.toCharArray();

for(int i=0;i

if(tem[i]>='0'&&tem[i]<='9'){

System.out.println("temp"+tem[i]);

sum.push(Float.valueOf(tem[i]-'0'));

}else {

float t=getSum(tem[i],sum.pop(),sum.pop());

System.out.println("t"+t);

sum.push(t);

}

}

return sum.pop();

}

public static StringBuilder getLast(String s){

char st[]=s.toCharArray();

StringBuilder out =new StringBuilder();

for(int i=0;i

char temp =st[i];

if(temp==' ')

continue;

//如果是数字,添加到输出字符串

if(temp>='0'&&temp<='9'){

System.out.println("hell0");

out.append(temp);

continue;

}

//如果碰到的是左括号,压入栈中

if(temp=='('){

stack.push(temp);

System.out.println("hello(");

continue;

}

//如果符号是+或者-,当符号栈非空并且栈定元素不为(,

//则将栈顶符号出栈,重复上述步骤,直到while循环不成立,退出,然后把符号压入

//理解也很简单,因为+-的优先级最低,所以符号栈的符号只要不遇到

//左括号就出栈

if(temp=='+'||temp=='-'){

while((!stack.empty())&&(stack.peek()!='(')){

System.out.println("jia");

out.append(stack.pop());

}

stack.push(temp);

continue;

}

//如何遇到右括号,将左括号之后的元素都出栈输出,将左括号出栈不输出

if(temp==')'){

while((!stack.empty())&&(stack.peek()!='(')){

System.out.println("you");

out.append(stack.pop());

}

stack.pop();

continue;

}

//如遇到* /将符号栈的* /出栈并输出

if(temp=='*'||temp=='/'){

while ((!stack.empty())&&(stack.peek()=='*'||stack.peek()=='/')){

System.out.println("cheng");

out.append(stack.pop());

}

stack.push(temp);

continue;

}

}

//字符串遍历完,再检查符号栈,将其中的都输出

while (!(stack.empty())) {

System.out.println("last");

out.append(stack.pop());

}

return out;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值