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
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
java的算术表达式程序,java计算数学表达式相关推荐
- java 简单的计算器程序,Java 简易计算器程序
最近开始学习java,参考教科书写了一个简单的计算器程序,贴上来,以便有用的时候可以参考. 呵呵,哈哈!!! import java.awt.Container; import java.awt.Fl ...
- java多客户端聊天程序,java – 多客户端聊天程序,向所有客户端广播聊天?
我正在尝试制作一个可以容纳多个客户端的非常简单的聊天程序.我有一个多线程服务器,可以连接多个客户端,但服务器只与单个客户端通信(因为它应该,每个客户端都在自己的线程上)我需要帮助让服务器发送来自所有连 ...
- Java数字包装类基本程序,Java基本数据类型包装类
基础数据类型包装类 当一个程序要求交互式输入一个int类型的年龄时,从文本框中输入的结果肯定是String类型的.要在程序中进行相关操作,它必须先转换为int类型.因此可以使用数据类型的转换或强制转换 ...
- java能调用python吗_如何使用运行时在Java中调用python程序 - java
我想用来自Java的参数调用python程序.但是我的输出是空白.代码在这里. Python代码在这里: import sys print(sys.argv[1]) Java代码在这里: public ...
- JAVA日历窗口小程序,Java日历的小程序
Java写的日历小程序,算法效率虽然不算很高,却是简单实用的 CalendarBean.java import java.util.Calendar; public class CalendarBea ...
- java万能万年历的程序,java 实现万年历
以前初学java写万年历,都是采用基本的算法求出是否闰年闰月 计算公式如下 int year = 2014, month = 8, total = 0; if (month == 1 || month ...
- java实现表白小程序——java小程序
今天闲来无事,教大家一个哄妹子的小case.我们需要创建一个心形图案,按照心形图案的位置和长度,对所创建的字符串进行截断并在所需的位置上输出,最终能呈现在屏幕上满满的爱心.废话不多说,直接上源码看效果 ...
- java ee的小程序_Java EE调度程序
java ee的小程序 Java EE应用程序服务器具有本机调度支持,并且在大多数应用程序中,不需要包括外部依赖项,例如著名的Quartz调度程序库. Java EE 6和7完整配置文件上提供的Jav ...
- JAVA调用C语言程序
JAVA调用C语言程序 JAVA调用C语言程序 1. 编写带有native声明的方法的Java类 2. 使用javah 生成:jniSample.h的头文件 3. 使用C实现本地sum方法:(这里我生 ...
最新文章
- MySQL主从的一致性校验及修复
- Fundamental Research:根系分泌物通过调控土壤微生物影响碳周转的机理
- FPGA的历史、现状和未来
- mysql用户权限设置
- Image Cloud Gallery
- 【Python】多种方式实现生成验证码
- Python 简单入门学习笔记
- java类的加载机制
- window下遍历并修改文件
- Feign 超时设置
- java判断字符串是否是空格_检查字符串在Java中是否为空格,空(“”)或null
- codeforces round #257 div2 C、D
- 2022-2027年中国新能源汽车功率电子行业市场全景评估及发展战略规划报告
- Linux安装文件报错configure: error: no acceptable C compiler found in $PATH
- ERROR: ld.so: object ‘/usr/local/lib/libc2.28.so‘ from /etc/ld.so.preload cannot be preloaded ...
- OTN 设备基本组成介绍
- 倍福--电子凸轮表绘制
- SSH免密失败并报错:no mutual signature algorithm
- 【100 种语言速成】第 4 节:Lua
- Mac OS无法进入系统/数据备份/重装系统方法步骤