逆波兰式java实现代码 c++逆波兰式

用Java写的计算器的程序!不需要界面!用java写的计算器的程序,主要是通过控制台输入,主要方法是使用scanner类来接收用户从键盘输入的一个算式,通过分解算式,存入两个字符串,判断中间的的符号,进行相应计算,如下代码:
System.out.println("-----------------------------------");
System.out.println("请输入一个算术表达式,如:45*23");
Scanner in = new Scanner(System.in);//接收用户从键盘输入的字符
String str = in.nextLine();
StringBuffer buffer = new StringBuffer();//保存左侧的数字
StringBuffer buffer1 = new StringBuffer();//保存右侧的数字
char t = ' ';//保存运算符
for (int i = 0; istr.length(); i++) {
if (str.charAt(i) == '+' || str.charAt(i) == '-'
|| str.charAt(i) == '*' || str.charAt(i) == '/') {
t = str.charAt(i);//识别是什么运算符
for (int j = i + 1; jstr.length(); j++) {
buffer1.append(str.charAt(j));
}
break;
} else {
buffer.append(str.charAt(i));
}
【逆波兰式java实现代码 c++逆波兰式】}
String c = buffer.toString();
String d = buffer1.toString();
double a = Double.parseDouble(c);
double b = Double.parseDouble(d);
double sum = 0;
if (t == '+') {
sum = a + b;
}
if (t == '-') {
sum = a - b;
}
if (t == '*') {
sum = a * b;
}
if (t == '/') {
sum = a / b;
}
System.out.println("程序运算...");
System.out.println(c+t+d+"="+sum);
System.out.print("-----------------------------------");
运行结果如下:
Java计算字符串中的数学表达式的值算法怎么写?代码网上很多,只说说算法吧
12+8/4-5+(3-4)
把这样的表达式拆成:(操作数)(操作符)、
12+
8/
4-
5+(
3-
4)
(术语叫做逆波兰式)
默认的计算顺序是从左往右,记为left 。另设从右往左,记为right
设计Element类 , 具有 操作数 operant, 操作符operator, 操作顺序 order三个属性
用两个先进后出的栈结构StackElement a,b;
一开始所有的Element都在a中,逐个弹出计算合并值,
当遇到乘、除、括号时计算顺序改变成right,把当前结果放到b中暂存 。
直到再次遇到加、减、)右括号时,意味计算顺序复位成left,先把b中的暂存结果全部合并后,再继续算a中的剩余数据
最后合并成一个结果值 。
java 关于逆波兰表达式的两个题import java.util.Stack;
/**
* @author wengsh
* @date 2010-6-3 用 输入 (6+5)*(5+5) 测试一下
*/
public class MyDemo {
public static void main(String[] a) {
StackCharacter stack = new StackCharacter();
StringBuffer sb = new StringBuffer();
if (a.length1) {
System.out.println("参数长度不够");
} else {
String s = a[0].trim();
char[] c = s.toCharArray();
try {
for (int i = 0; ic.length; i++) {
int priority = getPriority(c[i]);
if (priority == -1) { // 如果是数字
sb.append(c[i]); // 输出数字或都字母
} else {
if (stack.isEmpty()) {// 当栈为空时
stack.push(c[i]); // 把字符压入栈
} else {// 当栈为不空时
if (priority == -2) { // 如果是 ')'
while (!stack.isEmpty()
getPriority(stack.peek()) != 8) {
sb.append(stack.pop());// 把'('之上逆波兰式java实现代码的字符弹出栈并输出
}
stack.pop(); // 栈弹出'('
} else {
// 当要压入栈逆波兰式java实现代码的字符逆波兰式java实现代码的优先级小于 等于栈顶字符的优先级且栈顶字符不为'('时
while (!stack.isEmpty()
priority = getPriority(stack.peek())
getPriority(stack.peek()) != 8) {

推荐阅读