编写程序,计算任何一个四则表达式的值。

songliangsl 2007-11-09 03:44:34
编写程序,计算任何一个四则表达式的值。
(除法取整即可,不必考虑小括号)

例如:变量a的值为“23+3*32/2-65”。运行程序后输出此表达式的结果。
要求:综合应用字符串和Vector的相关知识。

拆分出字符和數字之后便不會了....
...全文
341 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharpyuce 2007-11-09
  • 打赏
  • 举报
回复
这个可是个经典的编程,计算器的实现,实现起来很麻烦的,要使用到栈,还要考虑到他的优先级。
http://book.csdn.net/bookfiles/38/1003811992.shtml
上面这个是他的完整的实现和思路;
我也曾经写了一个简单的实现是采用LinkedList实现的

//解析算术式,把分别把数字,运算符放入number,和op中
String s ="........." //要计算的表达式
LinkedList<String> number = new LinkedList<String>();
LinkedList<String> op = new LinkedList<String>();
for (String n : s.split("\W")){
number.add(n);
}
System.out.println("计算之前 number:" + number + " 个数 :"
+ number.size());
for (String o : s.split("\w+")){
op.add(o);
}

op.remove(0); // 第1个元素为"",移除

//System.out.println("计算之前 op :" + op + " 个数:" + op.size());
//先计算*,/运算,并把计算过的数和运算符设置为字符串null,对于数的设置把左操作数
//置字符串null,右操作数置为2数运算的结果
for (int i = 0; i < number.size() - 1; i++){
String p = op.get(i);
if (p.equals("*")) ...{
int n = Integer.parseInt(number.get(i))
* Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
} else if (p.equals("/")){
int n = Integer.parseInt(number.get(i))
/ Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
}
}
// System.out.println("乘除运算完毕!");
// 将number,op中置null的删除
for (Iterator<String> it = number.iterator(); it.hasNext();){
if (it.next().equals("null")){
it.remove();
}
}

// System.out.println("进行乘除计算后剩余的计算数: number:" + number + "个数:"
// + number.size());
for (Iterator<String> it = op.iterator(); it.hasNext();){
if (it.next().equals("null")){
it.remove();
}
}

// System.out.println("进行乘除计算后剩余的操作符: op:" + op + " 个数:" + op.size());

//进行+,-运算
boolean flag = true;
while (flag){
//运算过的置null字符串
for (int i = 0; i < number.size() - 1; i++){
String p = op.get(i);
if (p.equals("+")){
int n = Integer.parseInt(number.get(i))
+ Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
} else if (p.equals("-")){
int n = Integer.parseInt(number.get(i))
- Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
} else ...{
continue;
}
}
//将置null的删除
for (Iterator<String> it = number.iterator(); it.hasNext();){
if (it.next().equals("null")){
it.remove();
}
}
// System.out.println("进行乘除计算后剩余的计算数: number:" + number + "个数:"
// + number.size());
for (Iterator<String> it = op.iterator(); it.hasNext();){
if (it.next().equals("null")){
it.remove();
}
}
// System.out.println("进行乘除计算后剩余的操作符: op:" + op + " 个数:"
// + op.size());
// System.out.println(number);

//判断如果op中没有元素,将算术式也运算完毕
if (op.size() == 0){
flag = false;
break;
}
}
// System.out.println("进行加减计算后剩余的计算数: number:" + number + " 个数:"
// + number.size());
// System.out.println("进行加减计算后剩余的操作符: op:" + op + " 个数:" + op.size());
// System.out.println(number);
String result = number.get(0);
System.out.println("运算结果:" + result);

songliangsl 2007-11-09
  • 打赏
  • 举报
回复
public class Test {
public static void main(String[] args) {
String s = new String("23+3*32/2-65");
String[] s1 = s.split("\\D");
String[] s2 = s.split("\\d");
如何才能做個循環依次儲存并計算他們?
我迷這里好多天了T T
拜托請解答,謝謝...
songliangsl 2007-11-09
  • 打赏
  • 举报
回复
拆分有寫出來...
拆分后要如何計算啊....
sunshineqs 2007-11-09
  • 打赏
  • 举报
回复
先将其转化为后缀式23 3 32 ^ 2 65 - / + , 然后顺序存储,当遇到运算符时,取出前面两个存储的数字,结果再存储,然后按照这样一次进行,
代码自己尝试一下吧!

62,614

社区成员

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

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