12.25栈实现简易计算器

栈实现计算器

思路:
利用数组模拟出栈的基本结构
创建两个栈分别存放数字和符号
创建一个指针变量遍历字符串
判断遍历到的字符是数字还是符号(注意转换成数字要减去48,因为它默认会是char类型的1转成int类型)
如果是数字直接入栈,也可以判断栈是否已满,在入栈
如果是字符,自定义字符级别,判断字符级别是多少。如果大于字符栈栈底的字符,就直接加入。反之取出数字栈的两个数字,再从字符栈取出一个字符(因为栈是先进先出,所以要注意运算顺序)进行运算
所有字符遍历完毕,进入一个循环。终止条件是数字栈只有一个或者字符栈为空。每次取出两个数字和一个字符进行运算。最后栈底的数字即为最终结果。

public class StackCalce {
    public static void main(String[] args) {
        String str = "80*2-6+4";
        Stack stack = new Stack(10);
        int i = stack.jisuanNumber(str);
        System.out.println("结果是"+i);
    }

}
class Stack {
    public int top;
    public int bottom;
    public Object stackList[];
    public int max;

    public Stack(int max) {
        this.stackList = new Object[max];
        this.top = -1;
        this.bottom = -1;
        this.max = max;
    }

    public boolean isnull() {
        return top == -1;
    }

    public boolean isfull() {
        return top == max - 1;
    }

    public void push(Object obj) {
        if (isfull()) {
            System.out.println("栈满,无法加入");
            return;
        }
        top++;
        stackList[top] = obj;
        System.out.println("加入成功");
    }

    public Object pop() {
        if (isnull()) {
            System.out.println("栈空,无法删除");
        }
        Object obj = stackList[top];
        stackList[top] = null;
        top--;
        return obj;
    }

    public Object peek() {
        return stackList[top];
    }

    public void show() {
        int temp = top;
        if (isnull()) {
            System.out.println("栈空,无法查看");
            return;
        }
        while (true) {
            if (temp == -1) {
                break;
            }
            System.out.println(stackList[temp]);
            temp--;
        }
    }

    public int dengji(char fuhao) {
        if (fuhao == '=' || fuhao == '-') {
            return 0;
        } else if (fuhao == '*' || fuhao == '/') {
            return 1;
        } else {
            return -1;
        }
    }

    public boolean isfuhao(char ch) {
        return ch == '+' || ch == '-' || ch == '*' || ch == '/';
    }

    public int add(int number1, int number2, char fuhao) {
        switch (fuhao) {
            case '+':
                return number1 + number2;
            case '-':
                return number1 - number2;
            case '*':
                return number1 * number2;
            case '/':
                return number1 / number2;
        }
        throw new RuntimeException("非法参数");
    }

    public int jisuanNumber(String str) {
        Stack shuzi = new Stack(10);
        Stack fuhao = new Stack(10);
        String numb = "";
        for (int i = 0; i < str.length(); i++) {
            if (isfuhao((char) str.codePointAt(i))) {
                var fu = (char) str.codePointAt(i);
                if (fuhao.isnull()) {
                    fuhao.push(fu);
                } else if (dengji(fu) <= dengji((char) fuhao.peek())) {
                    int number1 = (int) shuzi.pop();
                    int number2 = (int) shuzi.pop();
                    shuzi.push(add(number2, number1, (char) fuhao.pop()));
                    fuhao.push(fu);
                } else {
                    fuhao.push(fu);
                }
            } else {
                if(i == str.length()-1){
                    shuzi.push((int) str.codePointAt(i)-48);
                }
                else {
                    numb += String.valueOf((int) str.codePointAt(i)-48);
                    if(isfuhao((char) str.codePointAt(i+1))){
                        shuzi.push(Integer.parseInt(numb));
                        numb = "";
                    }else {
                        shuzi.push(Integer.parseInt(numb));
                    }
                }
            }
        }
        while (true) {
            if (fuhao.isnull()) {
                break;
            }
            int num = (int) shuzi.pop();
            int num2 = (int) shuzi.pop();
            char fu = (char) fuhao.pop();
            int add = add(num, num2, fu);
            shuzi.push(add);
        }
        return (int) shuzi.pop();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Polygon Cruncher是一个功能强大的三维模型优化工具,可用于减少多边形数量并优化模型,从而改善渲染和性能。它的版本V12.25可以与3D建模软件Max一起使用。 要在Max中使用Polygon Cruncher V12.25,首先需要安装和激活该软件。安装完成后,从Max的菜单栏中选择Polygon Cruncher以打开插件界面。在该界面中,可以调整几个参数来优化模型。 首先,你可以选择要优化的模型文件。Max支持多种文件格式,如.obj、.fbx等。选择一个模型文件后,该文件将被加载到Max中。 接下来,需要选择优化选项。Polygon Cruncher提供了一些预设选项,例如:低,中,高和超高。根据你对优化结果的期望,选择合适的预设选项。 在选择了优化选项后,你可以调整其他参数。例如,你可以设置最大多边形数量、最大顶点数量以及对UV和纹理的保留程度。这些参数将影响模型的细节和外观。 调整参数后,点击“优化”按钮即可开始优化过程。Polygon Cruncher将根据所选的参数和选项,自动减少模型的多边形数量和顶点数。优化完成后,你可以在Max中查看并评估优化后的模型。如果结果满意,保存模型并导出到其他软件中使用。 总的来说,通过使用Polygon Cruncher V12.25和Max,可以快速且有效地优化三维模型,以改善渲染和性能。无论是对于个人项目还是商业项目,这个工具都是非常有用的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值