用栈实现算数表达式求结果的问题!

疯狂面条狗 2009-03-28 03:46:10
import java.util.Stack;

public class yufafenxi {

public static void main(String[] args) {
int result = 0;
Stack stack1 = new Stack(); // 运算符栈
Stack stack2 = new Stack(); // 运算数栈
stack1.push('#');
char[] c = "3-2+4*5#".toCharArray(); //算数表达式
int i = 0;
while (c[i] != '#') {
if (!yunsuanfu(c[i])) { //是否是运算符
stack2.push(c[i]);
} else {
if (f(stack1.peek().toString().toCharArray()[0]) - g(c[i]) < 0) {
stack1.push(c[i]);
} else {
int a = 0, b = 0;
char op = stack1.peek().toString().toCharArray()[0];
stack1.pop();
a = stack2.peek().toString().toCharArray()[0];
stack2.pop();
b = stack2.peek().toString().toCharArray()[0];
stack2.pop();
switch (op) {
case '+':
result = b + a;
stack2.push(result);
break;
case '-':
result = b - a;
stack2.push(result);
break;
case '*':
result = b * a;
stack2.push(result);
break;
case '/':
result = b / a;
stack2.push(result);
break;
}
}
}
i++;
}
result = stack2.peek().toString().toCharArray()[0];
System.out.println(result);
}

public static int f(char c) { // 左优先函数
switch (c) {
case '+':
return 2;
case '-':
return 2;
case '*':
return 3;
case '/':
return 3;
case '#':
return 0;
default:
return -1;
}

}

public static int g(char c) { // 右优先函数
switch (c) {
case '+':
return 2;
case '-':
return 2;
case '*':
return 3;
case '/':
return 3;
case '#':
return 0;
default:
return -1;
}
}

public static boolean yunsuanfu(char c) { // 是运算符
if (c == '+' || c == '-' || c == '*' || c == '/' || c == '#') {
return true;
}
return false;
}
}
为什么我输任意一个表达式,这程序运行的结果怎么总是53啊?请给位帮帮我啦!
...全文
54 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoutao198712 2009-03-28
  • 打赏
  • 举报
回复
我的天啊,貌失java.util.Stack有bug的了,通过继承来时LinkList来实现Stack才是推荐方案。
fosjos 2009-03-28
  • 打赏
  • 举报
回复
单步调试测一下就可以了

或者关键点上加print

看看哪个步骤有问题
1 / 3(一) 大纲_Python 基础(3 天×6h) 课时:18 小时(6 小时×3 天)课程简介 本课程从零基础开始介绍 Python 编程知识,快速入门 Python 语言基础,循序渐进地掌握 Python 模块的构建和 Python 程序的代码的基本功能的实现。学员基础  了解计算机基本操作,掌握一般文字输入和处理的基础知识 了解计算机软件,硬件等基本概念课程目标  全面认识 Python,包括语言特点、应用领域、安装与执行原理、集成开发环境的使用等 掌握 Python 的基础语法,实现简单的程序编写 熟练使用 Python 的各种数据结构,掌握各自的适用场景 熟练使用模块和包,理解使用模块的好处,在工作中灵活借助模块实现课程内容 Python 概述及开发环境搭建 1.1 Python 应用领域 1.2 常见编程语言特点  Python 语言特点 面向对象与面向过程 编译型与解释型1.3 Python IDE 集成开发环境  PyCharm 安装及配置 Python 编程语言基础 2.1 库、包、模块 2.2 变量的定义及命名规范 2.3 书写规范 2.4 命名规范 2.5 运算符  算数运算符、逻辑运算符、赋值运算符、比较运算符、成员运算符、身份运算符2 / 3 运算符优先级 流程控制 3.1 流程控制语句结构 3.2 分支结构 if else 的语法结构及应用场景  多条件判断3.3 循环语句  for 语句 while 语句 嵌套循环 循环控制语句 跳出循环 常用数据类型及其函数 4.1 字符串 str 4.2 整数 int、浮点小数 float 4.3 布尔型 bool 4.4 列表 list  数值列表 range 数值列表转列表:list 函数 遍历列表 列表解析4.5 元组 tuple 4.6 字典 dict 4.7 集合 set 4.8 切片 4.9 在列表中存储字典 4.10 在字典中存储列表、字典 4.11 高级数据类型的运算 4.12 案例演练  练习:登录验证3 / 3 练习:遍历元组 练习:遍历集合 练习:while 循环列表 函数 5.1 函数的定义和作用  定义函数规范 调用函数5.2 函数的参数和返回值 5.3 局部变量与全部变量 5.4 位置参数与关键字参数 5.5 缺省参数与多值参数 5.6 数据的不可变类型与可变类型 5.7 常用内置函数  输出输入函数:print、input dir 函数 包与模块 6.1 了解库、包、模块 6.2 模块的导入方式  导入整个模块(.py) 导入模块中的函数 自定义模块的导入与应用6.3 定义别名 6.4 了解与制作包  导入包的方式6.5 常用标准库  time:日期时间计算 os:文件和目录处理

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧