用Java实现输入算数式计算值 ---中缀表达式转换为后缀表达式

本文介绍了如何使用Java实现一个文本计算器,支持加减乘除和括号运算。通过正则表达式将输入的中缀表达式转化为后缀表达式,利用栈的数据结构遵循特定规则进行转换。在处理过程中,需要考虑数字多位的情况以及错误检测,以确保表达式的正确性。文中提供了作者的代码实现及另一位同学简洁的代码参考。
摘要由CSDN通过智能技术生成

基本要求

实现文本计算器,支持加减乘除、括号。

基本思路:
首先是先将输入的文本字符串 通过正则表达式转换为一个个字符 再将其转换为后缀表达式:
其中中缀表达式转换为后缀表达式 需要使用到栈的相关操作 还有一些基本的规则:
1.遇到操作数,直接输出;
2.栈为空时,遇到运算符,入栈;
3.遇到左括号,将其入栈;
4.遇到右括号,执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出;
5.遇到其他运算符’+”-”*”/’时,弹出所有优先级大于或等于该运算符的栈顶元素,然后将该运算符入栈;
6.最终将栈中的元素依次出栈,输出。
经过上面的步骤,得到的输出既是转换得到的后缀表达式。

还有就是当输入的字符中数字的位数不是一位时 分成字符时就需要特别考虑

还有差错检测:对于输入的文本计算式需要先进行差错检测 如果时错误的表达式即不需要进行计算即可:

因为能力有限 写的代码数字三位时 就会计算错误
下面附上个人的代码 :



import java.util.Scanner;

/*文本计算器,支持加减乘除、括号。*/
//1+2*(4-3)/2 (10+20)*3/5-6 10+2*(40-3)/2
public class Calculate {
    public static String[] stack= new String[100];//定义栈
    public static int top=0;
    public static void push(String a) {
   //入栈操作
        if(top>=100) return;
        stack[top++]=a;
    }

    public static String pop() {
   //出栈操作
        if(top==0) return null;
        return stack[--top]; 
    }

    public static boolean isEmpty() {
   //判断栈是否为空
        if(top==0) return true;
        return false;
    }

    public static String getTop() {
   //获取栈顶元素
        if(top<100)
        return stack[top-1];
        return null;
    }

    public static void zl1(String[] s1,String[] s2) {
   //s2是后缀表达式
        int j=0;
        for(int i=0;i<s1.length;i++)//遍历字符串
        {
             if(s1[i].equals("")) break;
             else if(isEmpty()&&(s1[i].equals("+")||s1[i].equals("-")||s1[i].equals("*")||s1[i].equals("/"))) {
                push(s1[i]);
            }
            else if(!s1[i].equals("+")&&!s1[i].equals("-")&&!s1[i].equals("*")&&!s1[i].equals("/")&&!s1[i].equals("(")&&!s1[i].equals(")")) {
                s2[j++]=s1[i];
            }
            else if(s1[i].equals("(")) push(s1[i]);
            else if(s1[i].equals(")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值