用栈来实现计算器功能运算

java实现科学计算器 目录介绍实现思路实现过程和代码1.界面设计2.栈,中缀转后缀3.判断错误4.计算后缀表达式完整代码 介绍 本次设计的是一个有33个按钮的科学计算器。可以进行加,减,乘,除,开根号,阶乘,次方,百分号,对数,三角函数的计算。 实现思路 通过点击按钮可以得到一个算术表达式,并且它是一个字符串类型,然后需要做的就是把这个字符串转化为计算机可计算的形式。这里就需要用到中缀表达式转化为后缀表达式。转化完之后通过栈来一步步的进行输出和计算,最后输出结果。 实现过程和代码 1.界面设计 设计效果如图所示: 由图片可知, 阅读详情

使用步骤

  • 1.将一个字符串算式先转换成后缀表达式
  • 2.把后缀表达式转换成结果
    结果
    相关的代码如下

import java.util.Scanner;
import java.util.Stack;

public class Task3_22 {

    /*
     * 中缀转后缀
     */
    public static void Suffix(String str){
        Stack<Character> s = new Stack<>();
        int position = 0;
        /*
        *我的自定义个ArrayList相关代码已在数据结构的MyArrayList中
        */
        MyArrayList<String> my = new MyArrayList<>();
        for(int i=0; i<str.length(); i++){
            char c = str.charAt(i);
            switch(c){
                case '+':
                case '-':
                    my.add(str.substring(position, i));
                    position = i+1;
                    while(!s.empty() && s.peek() != '('){
                        my.add(s.pop()+"");
                    }
                    s.push(c);
                    break;
                case '*':
                case '/':
                    my.add(str.substring(position, i));
                    position = i+1;
                    while(!s.empty() && s.peek() != '+' && s.peek() != '-' && s.peek() != '('){
                        my.add(s.pop()+"");
                    }
                    s.push(c);
                    break;
                case '(':
                    my.add(str.substring(position, i));
                    position = i+1;
                    s.push(c);
                    break;
                case ')':
                    my.add(str.substring(position, i));
                    position = i+1;
                    while(!s.empty() && s.peek() != '('){
                        my.add(s.pop()+"");
                    }
                    s.pop();
                    break;
                case '^':
                    my.add(str.substring(position, i));
                    position = i+1;
                    while(!s.empty() && s.peek() == '^' || s.peek() == '('){
                        my.add(s.pop()+"");
                    }
                    s.push(c);
                    break;
                case '=':
                    my.add(str.substring(position, i));
                    while(!s.empty()){
                        my.add(s.pop()+"");
                    }
                    break;
            }
        }
        for(int i=0; i<my.size(); i++){
            System.out.print(my.get(i));
        }
        System.out.println();
        evalPostfix(my);
    }

    /*
     * 后缀转结果
     */
    public static void evalPostfix(MyArrayList<String> my){
        Stack<Double> s = new Stack<Double>();
        Double a, b, result = 0.0;
        boolean isNumber;
        for(int i=0; i<my.size(); i++){
            try{
                isNumber = true;
                result = Double.parseDouble(my.get(i));
            }catch(Exception e){
                isNumber = false;
            }
            if(isNumber)
                s.push(result);
            else{
                switch(my.get(i)){
                    case "+":
                        a = s.pop();    b = s.pop();
                        s.push(b+a);    break;
                    case "-":
                        a = s.pop();    b = s.pop();
                        s.push(b-a);    break;
                    case "*":
                        a = s.pop();    b = s.pop();
                        s.push(b*a);    break;
                    case "/":
                        a = s.pop();    b = s.pop();
                        s.push(b/a);    break;
                    case "^":
                        a = s.pop();    b = s.pop();
                        s.push(Math.exp(a*Math.log(b)));
                        break;
                }
            }
        }
        System.out.println(s.peek());
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        Suffix(str);
    }

}
【献给过去的自己】栈实现计算器(C语言) 时间流逝,在竞争激烈的社会背景下,我们的身处IT行业,不断逼迫自己去学习,去成长。但是总会觉得自己做的还不够。为什么总是赶不上别人的脚步,陷入怀疑自我的处境。朋友们,偶尔回头看看来时路上的自己,你会发现,你一直在成长,你的努力一直是正向反馈着你,不要轻视自己的努力。共勉~ 阅读详情

相关推荐

【大模型】MHA,MQA,GQA及KV Cache详解

在自回归模型中(Autoregressive Models),模型会逐个生成文本的每个token,这个过程可能比较慢,因为模型一次只能生成一个token,而且每次新的预测都依赖于之前的上下文。这意味着,要预测第1000个token,你需要用到前999个token的信息,这通常涉及到对这些token的表示进行一系列矩阵乘法运算。而要预测第1001个token,你不仅需要前999个token的信息,还要加上第1000个token的信息。

酒酿小圆子呀~ 2612

利用栈实现计算器,实战挺好

关注、星标公众号,直达精彩内容来源: https://www.cnblogs.com/NoneID/p/15777625.html整理:李肖遥1. 中缀表达式 和 后缀表达式中缀表达式: 顾名思义,操作符在操作数的中间,例如: 1 + 1后缀表达式: 指操作符在操作后后面 ,例如 1 1 + , 就代表 中缀表达式 的 1 + 1关于具体的 请参考:https://baike.baidu...

李肖遥的专栏 757

机械臂的运动学分析-工业机器人

机械臂的运动学是研究机械臂各连杆坐标系之间的运动关系,是对机械臂进行运动控制的基础。本章分析了所设计的六自由度机械臂的运动学。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。

qq_59137727的博客 6647

栈(综合计算器的实现)

1.栈(stack)是一个先入后出的有序列表;2.栈是为了限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊性表,允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom);因此我们可以将栈的结构理解为一口井;3.根据上面栈的定义可以知道,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除;

Strine的博客 1258

立创EDA手动拼板实战:当自带功能不够用,如何用‘复制粘贴’搞定异形拼版与特殊布局

本文详细介绍了立创EDA手动拼板技术在异形拼版与特殊布局中的应用实战。通过CTRL+SHIFT+V等核心操作技巧,解决混合尺寸拼板、特殊间距需求等复杂场景,提升PCB设计效率与灵活性,特别适合需要高精度控制的射频电路和医疗设备项目。

weixin_31967485的博客 385

无人机+消防车:高楼灭火系统技术详解

传统的消防设备,如登高车、车载水枪、水炮和高喷车,在50米以上高度的火源面前往往力不从心,100米以上高层火灾则更加依赖消防员“爬楼”灭火,效率低下且风险极高。消防水带:采用聚乙烯丝材质,超轻、耐腐蚀、强度高,能够携带大量水或灭火泡沫进行高空喷水灭火作业。“无人机+消防车”高楼灭火系统主要由消防车和无人机两部分组成,通过机车联动实现高效灭火。高效灭火:无人机能够快速到达高层建筑顶部或指定位置进行灭火作业,大大提高了灭火效率。空压泡沫系统:配备超大水箱,支持长时间供应灭火泡沫,满足无人机灭火剂的需求。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1670

使用栈实现简单计算器

描述: 输入一串字符串,输出它的计算结果。//考虑输入不正确的情况 例如输入:722-5+1-5+3-4 输出18 代码如下: public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); Stack<Character> stack2 = new Stack<>();

Little Big Us的博客 1486

【优化求解】基于matlab粒子群算法PSO确定最佳开关角对称级联多层逆变器【含Matlab源码 13080期】

粒子群算法PSO确定最佳开关角对称级联多层逆变器 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 97

操作系统课后题答案二

第六章 1.何谓数据项、记录和文件? 答:①数据项分为基本数据项和组合数据项。基本数据项描述一个对象某种属性的字符集,具有数据名、数据类型及数据值三个特性。组合数据项由若干数据项构成。 ②记录是一组相关数据项的集合,用于描述一个对象某方面的属性。 ③文件是具有文件名的一组相关信息的集合。 2.文件系统的模型可分为三层,试说明其每一层所包含的基本内容。 答:第一层...

weixin_34326558的博客 19万+

即梦(Dreamina)技术浅析(六):多模态生成模型

多模态生成模型的目标是结合不同模态的数据(如文本和图像),生成新的视觉内容。其核心思想是利用文本描述引导图像或视频的生成过程,使得生成结果能够准确反映用户的意图。

m0_75253143的博客 1333

090、Sensor上电时序与帧同步的驱动级实现——以索尼IMX766为例的AVDD/DVDD/IOVDD时序调优

摘要: 本文以索尼IMX766传感器为例,深入探讨了传感器上电时序与帧同步的驱动级实现问题。通过分析某车载项目量产中的高温黑屏故障,揭示了AVDD/DVDD/IOVDD时序偏差导致传感器内部状态机异常的根源。文章详细解读了IMX766三路电源的时序约束(如AVDD与DVDD需在1ms内同步至90%),并提供了驱动代码级实现方案,包括电源使能顺序、延时控制及帧同步配置。针对多摄同步场景,强调了曝光时间寄存器写入一致性的重要性。最后结合产线问题定位经验,提出通过示波器抓取电源波形验证时序合规性的方法。全文聚焦硬

zzfmlxs的博客 258

用栈实现计算器功能,满足带括号运算

package DataStrTest; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Stack; public class Counter { public static double con(String str) { S

qq_40870721的博客 664

将Keil中的变量数组导出

首先,写好导出数据的函数。

小柚子的博客 1951

基于QT实现的计算器(只需要简单的栈知识,不仅仅是四则运算,接近手机内置计算器功能)

参考文献:Qt 5.9 C++开发指南 (王维波等 著)及众多网上资料 1.问题定义及需求分析 课题目的: 由输入的四则算术表达式字符串,动态生成算术表达式所对应的后缀式,通过后缀式求值并输出; 输出的形式:界面上:以QT中的Text Browser进行输出结果。后台:通过suffix文件输出表达式的后缀表达式。 程序的功能:在布局和功能上,我们以小米内置计算器为标准。在运算上:我们实现...

qq_42181309的博客 1701

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

华为机试——实现一个简单的计算器

题目描述 * 题目:实现一个科学计算器完成基本的计算功能 * 输入描述:加减乘除的输入数据 * 输出描述:计算结果 * 示例:输入:-1*6 输出:-6 代码实现 #include <stdio.h> #include <stdlib.h> #include <string.h> #define STR_SIZE 2048 ...

Your Dream Started 1960

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

用两个栈实现计算器 - 程序设计

用两个栈实现计算器 任务概述 使用两个栈,实现计算器功能 例如用户输入字符串 1 + 8 / 4 计算器得出结果 3 程序设计 用户输入一串字符串,我们如何判断字符串是否合法。 如何读取数字,括号和运算符 如何解决 1+2/3 先运算 2/3 的问题,即运算符优先级问题 如何通过栈这个数据结构实现计算功能 1.判断字符串是否合理 当用户输入除了空格,数字,运算符以外的其他符号,肯定不合理 如果用户输入的运算符以连续出现的方式,我们也认为不合理 如果算式不是以数字结尾,不合理,示例: 1+2+ 如

程序员小章的博客 2126

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

基于C语言实现计算器功能 - 可直接用

基于链表栈实现计算器功能,性能稳定

DreamerPerple的博客 1422

JAVA栈实现计算器

栈实现计算器 如有错误欢迎指正! 文章目录栈实现计算器一、链表实现栈二、实现计算器功能 一、链表实现栈 代码如下(示例): class stack<T>{ private singlelinked<T> singlelinked = new singlelinked<>(); private int top = -1; public stack() { } //判断栈是否为空 public boolean isNull(

weixin_45543271的博客 319

C++简易计算器链栈版

利用链栈设计并实现一个整型算术表达式计算器(运算符至少包含±*/())。 数据结构:链表 概要设计:将自写栈(数据结构为数组)版计算器的栈结构替换成链栈,栈外的其他部分可几乎不做改动,只将对应顺序栈中函数替换成对应链栈中函数。 自写栈版链接点这里 详细设计: 设置结点Node存储运算符,设置结点node存储数字。 2.在原本的代码中字符栈和数字栈写在了同一个栈类里,通过不同的数据类型调用同名函数。为了保证思路清晰,改编后的代码中写了两个链表栈类,数字栈numstack和字符栈opstack。3.将栈类原本

qq_45747263的博客 1144

java计算器

刚学java不久,老师要说编个这 JAVA计算器 基础功能:类似windows计算器-普通计算器所具有的数的输入、加、减、乘、除、开根号、求倒数、退格、清空。 哪位高手指点哈,回去研究下,,灰常感谢,,       回复次数:2 BuuZJ(BuuZJ)等 级:   要类

北京联合大学优快云高校俱乐部 1695

一个能够实现简单功能的计算器

我也是win API的一个菜鸟,也是刚刚接触win API编程,自己练习制作了一个能够实现简单功能的计算器,在制作的过程中还是遇到了很多的问题,在这里和大家分享一下,希望能对初学者带来帮助,当然,也希望大家多提意见,完善它的功能,共同学习,共同进步!!! #include "stdafx.h" #include #include #include "resource.h" #incl

zzkflying的专栏 466

C++计算器实现 ——(完整功能实现、设计分析)

基于标准C++的计算器实现。 一、需求实现 1、实现功能: 支持运算符:+, - , *, /, %(百分号), ^(幂次方), | |(绝对值),!(阶乘)。其他符号:( ) [ ] { } 支持数据类型:正负数、小数。 2、实现方法 符号优先级处理方法:符号等级制 运算表达式处理方法:后缀表达式法 后缀表达式转换及计算辅助方法:符号栈、数字栈

demo_yo的博客 5万+

基于WinForm构建的多项式计算器

在这里,我们使用栈这一数据结构,利用其先进后出的特性,将读到的第一个符号压入符号栈,在读到下一个符号,与栈顶的符号的优先级进行比较,若优先级比栈顶的那个符号低,就将栈顶符号的连接的两个数字(数字存在数字栈中)进行运算,否则将当前符号压入符号栈。能够识别四则运算的优先级和括号 的计算器,难点在于如何在遇到乘号,除号或者是括号的时候暂时不计算前面的加法和减法,而先去计算优先级高的运算符。3.2.1判断优先级,若当前符号的优先级小于栈顶符号的优先级,则栈顶符号出栈,同时数栈中两个数字出栈;

2301_79937517的博客 1145

用Java实现的一个简单计算器,使用栈实现运算操作

java实现的一个简易计算器 计算器界面如下:(试用按例在图片上有所显示) 具体代码如下(如果看不懂可以私信我,记得点赞哦): PS:我还是个小菜鸟,写的不好处希望大家多多体谅 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.EmptyStackException; import ...

lxj2116的博客 321

利用栈结构来实现计算器功能

我们的要求是,优先级高的要先进行运算,后缀表达式是只有在遇到运算符时才弹出两个数进行运算,那么我们要做的就是把优先级最高的最先弹出,在有加减乘除和括号的运算中,括号的优先级无疑是最高的,所以遇到右括号时就可以直接弹出直到遇到左括号,遇到其他符号时就先存放在栈中,然后,当一个优先级低的元素要进栈时,优先级较高的运算符就必须先弹出来进行运算。到最后栈中还剩下的运算符,由于后面没有运算符了,而栈中的运算符本来就是按照优先顺序排序的,所以就直接按顺序弹出。当遇见右括号时,我们就把栈的元素弹出,直到遇见一个左括号。

weixin_43951537的博客 694

数据结构(C语言)栈的应用——编写一个四则运算计算器(输入数学公式得出计算结果)

数据结构(C语言)栈的应用——编写一个四则运算计算器(输入数学公式得出计算结果) 文章目录数据结构(C语言)栈的应用——编写一个四则运算计算器(输入数学公式得出计算结果)前言一、需要用到的知识点1.栈的特点2.要先明白怎么让计算机认得你输入的数学表达式2.1解决方案——将表达式转为后缀表达式二、有了理论知识后我们开搞1.准备工作2.大致的实现过程3.个函数实现的详细步骤3.1: int LeftPri(char op); //左运算符op的优先级和 int RightPri(char op);

weixin_51571420的博客 5022
上一篇: 数据结构之重写ArrayList的底层源码
下一篇: JAVA之查找二叉树ADT
LuFei_java
博客等级 码龄10年 1粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值