java的算术表达式程序,java计算数学表达式

import java.util.EmptyStackException;

import java.util.Stack;

public class CaculateFunction {

private static String[] TrnsInToSufix(String IFX)// PFX放后缀表达式,IFX为中缀表达式

{

String PFX[] = new String[IFX.length()];

StringBuffer numBuffer = new StringBuffer();// 用来保存一个数的

Stack s = new Stack();// 放操作符

String a;

s.push("=");// 第一个为等号

int i = 0, j = 0;

char ch;

for (i = 0; i < IFX.length();) {

ch = IFX.charAt(i);

switch (ch) {

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

while (Character.isDigit(ch) || ch == '.')// 拼数

{

numBuffer.append(ch); // 追加字符

ch = IFX.charAt(++i);

}

PFX[j++] = numBuffer.toString();// break;

numBuffer = new StringBuffer(); // 清空已获取的运算数字

continue; // 这里要重新循环,因为i已经增加过了

case '(':

s.push("(");

break;

case ')':

while (s.peek() != "(")

PFX[j++] = s.pop();

break;

case '+':

case '-':

while (s.size() > 1 && s.peek() != "(")

PFX[j++] = s.pop();

a = String.valueOf(ch);

s.push(a);

break;

case '*':

case '/':

while (s.size() > 1 && (s.peek() == "*") || s.peek() == "/"

|| s.peek() == "s" || s.peek() == "c"

|| s.peek() == "t" || s.peek() == "^"

|| s.peek() == "√")

// 优先级比较,与栈顶比较,

PFX[j++] = s.pop();// 当前操作符优先级大于等于栈顶的弹出栈顶

a = String.valueOf(ch);

s.push(a);

break;

case 's':

case 'c':

case 't':// 三角函数

while (s.size() > 1

&& (s.peek() == "s" || s.peek() == "c"

|| s.peek() == "t" || s.peek() == "^" || s

.peek() == "√"))

// 优先级比较,与栈顶,大于等于的弹出

PFX[j++] = s.pop();

a = String.valueOf(ch);

s.push(a);

break;

case '^':// 幂

case '√':// 开方

while (s.size() > 1 && (s.peek() == "^" || s.peek() == "√"))

PFX[j++] = s.pop();

a = String.valueOf(ch);

s.push(a);

break;

}

i++;

}

while (s.size() > 1)

PFX[j++] = s.pop();

PFX[j] = "=";

return PFX;

}

public static String Evaluate(String IFX)// 后缀表达式求值

{

String PFX[] = null;

try {

PFX = TrnsInToSufix(IFX);

} catch (EmptyStackException e) {

return "syntax error";

}

int i = 0;

double x1, x2, n;

String str;

Stack s = new Stack();

while (PFX[i] != "=") {

str = PFX[i];

switch (str.charAt(0)) {

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

s.push(str);

break;

case '+':

x1 = Double.parseDouble(s.pop());

x2 = Double.parseDouble(s.pop());

n = x1 + x2;

s.push(String.valueOf(n));

break;

case '-':

x1 = Double.parseDouble(s.pop());

x2 = Double.parseDouble(s.pop());

n = x2 - x1;

s.push(String.valueOf(n));

break;

case '*':

x1 = Double.parseDouble(s.pop());

x2 = Double.parseDouble(s.pop());

n = x1 * x2;

s.push(String.valueOf(n));

break;

case '/':

x1 = Double.parseDouble(s.pop());

x2 = Double.parseDouble(s.pop());

n = x2 / x1;

s.push(String.valueOf(n));

break;

case 's':

x1 = Double.parseDouble(s.pop());

n = Math.sin(x1 * Math.PI / 180);

s.push(String.valueOf(n));

break;

case 'c':

x1 = Double.parseDouble(s.pop());

n = Math.cos(x1 * Math.PI / 180);

s.push(String.valueOf(n));

break;

case 't':

x1 = Double.parseDouble(s.pop());

n = Math.tan(x1 * Math.PI / 180);

s.push(String.valueOf(n));

break;

case '√':

x1 = Double.parseDouble(s.pop());

n = Math.sqrt(x1);

s.push(String.valueOf(n));

break;// 开方

case '^':

x1 = Double.parseDouble(s.pop());

x2 = Double.parseDouble(s.pop());

n = Math.pow(x2, x1);

s.push(String.valueOf(n));

break;

}

i++;

}

String result = s.pop();

return result;

}

public static void main(String args[]) {

System.out.println(Evaluate("(31 + 21) * 51 - (21 + 33) / 2 = "));

}

}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点!

本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java开发区块链只需150行代码

本文目的是通过java实战开发教程理解区块链是什么。将通过实战入门学习&#xff0c;用Java自学开发一个很基本的区块链&#xff0c;并在此基础上能扩展如web框架应用等。这个基本的java区块链也实现简单的工作量证明系统。本文用一个java例子,演示了开发一个区块链应用的过程,涉…

关于Linux的总结(三)

1.man_page.txt 1.内部命令&#xff1a;echo 查看内部命令帮助&#xff1a;help echo 或者 man echo2.外部命令&#xff1a;ls 查看外部命令帮助&#xff1a;ls --help 或者 man ls 或者 info ls3.man文档的类型(1~9) man 7 man man 5 passwd4.快捷键&#xff1a; ctrl c&…

按钮长按

2019独角兽企业重金招聘Python工程师标准>>> 用update来实现定时 //长按处理update: function (delta) {cc.log("update "delta);this.totalTimedelta;if(this.totalTime>TOUCH_LONG_TIMER_INVOKE){this.stopTimer();this.invokeTouchLong();}},stop…

php email 发送,php 发送 Email

require("mail/class.phpmailer.php");//调用$mail new PHPMailer();//实例化phpmailer$address "mailxi126.com";//接收邮件的邮箱$mail->IsSMTP(); // 设置发送邮件的协议&#xff1a;SMTP$mail->Host "smtp.163.com"; // 发送邮件的…

Git-如何将已存在的项目提交到git

1.首先在码云或者github上创建一个不带README.md的项目&#xff0c;然后复制远程库的地址&#xff08;下面以码云为例&#xff09;&#xff1a;   2.进入本地已存在的项目目录&#xff1a;house    touch README.md //新建说明文件 git init //在当前项目目录中生成本地git…

Bash:字符串操作

参考&#xff1a;http://blog.csdn.net/finewings/article/details/5718133 字符串提取 去掉指定前缀 1. ${varible#pattern} 从头开始&#xff0c;左往右&#xff0c;删除最短的一个pattern结尾的字符串&#xff0c;即截取第一个pattern结尾子串之后的字符串 例…

ggplot2 theme相关设置—文本调整

在geom设置和scale设置之后&#xff0c;要想把图画的漂亮&#xff0c;theme设置是比不可少的 在theme 设置中element_text()是一项很重要的内容 element_text(family NULL, face NULL, colour NULL, size NULL, hjust NULL, vjust NULL, angle NULL, lineheight NULL) …

java top.dialog控件,java – 如何只为他的父级创建JDialog onTop?

可以说,我们有几个JFrame窗口同时可见,并且每个窗口都出现JDialog.当我们的窗口处于级联模式和对话框setAlwaysOnTop为真时,所有对话框将在最后一个窗口中可见.我只想将Dialog组件与其所有者关联起来,这样当你在Frames之间切换时,你只会在顶部获得一个对话框,并且在单击一个框架…

Eclipse出现the type java.lang.CharSequence can't be resolved.

出现这个问题我们需要安装一下JRE1.7这个版本&#xff0c;然后再项目里引入一下就可以了。 转载于:https://www.cnblogs.com/ganwei/p/4565883.html

php system 返回值127,php system 返回值 1

PayPal新的IPN返回接口(PHP)_计算机软件及应用_IT/计算机_专业资料。今天调试个客户的PayPal IPN返回接口死活不正确,用自己的老帐号和sandbox,都没问题,开始怀疑他......2.ob_start()还有一个不太明显但很致命的后门用法,实现代码如 2 9 ■ 1234 <?php /* 例 7*/$cmd sy…

window10 mysql5.7 解压版 安装

1. 解压mysql-5.7.11-winx64.zip 到某文件夹&#xff0c; 如C:\DevelopCommon\mysql-5.7.11-winx64。 2. 配置环境变量 变量名 &#xff1a; MYSQL_HOME 变量值 &#xff1a; C:\DevelopCommon\mysql-5.7.11-winx64 -------------- 变量名 &#xff1a; Path 变量值 &#xff…

Vmware中的centos虚拟机克隆之后没有eth0

克隆虚拟机之后&#xff0c;CentOS没有eth0的解决办法 我们常常需要从一台已经安装完成的虚拟机系统克隆出来一个新系统&#xff08;克隆时候必须要改变网卡物理地址&#xff0c;这一点无需多说&#xff09;&#xff0c;但是新系统启动之后&#xff0c;会发现系统网络工作不…

reset.css

body{margin:8px;} iframe{border:2px;} th,td{padding:1;} table{border-spacing:2px;border-collapse:separate;} dfn{斜体} <dfn> 标签可标记那些对特殊术语或短语的定义。 现在流行的浏览器通常用斜体来显示 <dfn> 中的文本。将来&#xff0c;<dfn> 还可…

java zero copy 实现,关于Zero Copy

概述很多web应用都会有大量的静态文件。我们通常是从硬盘读取这些静态文件&#xff0c;并将完全相同的文件数据写到response socket。这样的操作需要较少的CPU&#xff0c;但是效率有些低&#xff0c;它需要经过如下的过程&#xff1a;kernel从硬盘读取数据&#xff0c;越过ker…

Java量与变量的区别

2019独角兽企业重金招聘Python工程师标准>>> 常量&#xff1a;其值不变即为常量。 语法&#xff1a; 数据类型 常量名 值; double PI 3.14;    备注&#xff1a; 一般默认常量名大写。 变量与常量之间关系(量间关系) 先来一个简单的实例&#xff0c;好了解 Java…

团队作业6

Alpha版本展示 一、 刘阳航|201521123026&#xff08;组长&#xff09; 博客地址&#xff1a;http://www.cnblogs.com/lyhooo/ 负责图形的创建和移动部分&#xff0c; 游戏区操作的实现&#xff0c;部分算法的编写 陈文俊|201521123047 博客地址&#xff1a;http://www.cnblogs…

java 新浪短网址生成器,新浪短链接接口被限制?最新新浪短网址api接口

背景新浪短网址api是sina平台官对外公开的短网址生成接口&#xff0c;可以将长链接通过接口生成t.cn样式的短链接&#xff0c;可以说是非常好用的。但近期新浪官方开始对已经公布的接口做出了多重限制&#xff0c;很多之前能用的功能现在都频频被限制&#xff0c;甚至有的时候接…

第一节:程序集加载

我们知道JIT编译器将方法的IL代码编译成本地代码时&#xff0c;会查看IL代码中引用了哪些类型。在运行时&#xff0c;JIT编译器利用程序集的TypeRef和AssemblyRef元数据表来确定哪一个程序集定义了所引用的类型。在AssemblyRef元数据表的记录项中&#xff0c;包含了构成程序集强…

CentOS系统根目录组织结构

对于linux运维初学者来说&#xff0c;认识linux系统的文件组织结构来说&#xff0c;也是一件非常有意义的事情。当然对于学习运维者来说首选的Centos系列linux服务器版本了&#xff0c;同样属于菜鸟的我&#xff0c;今天和大家分享一下当前最为成熟的Centos6.8和Centos7.2版本的…

Sql Server 部署SSIS包完成远程数据传输

本篇介绍如何使用SSIS和作业完成自动更新目标数据任务。 ** 温馨提示&#xff1a;如需转载本文&#xff0c;请注明内容出处。** 本文链接:https://www.cnblogs.com/grom/p/9018978.html 笔者需要定期从服务器更新N家客户的远程服务器数据&#xff0c;上一篇的存储过程是其中一…