编写程序,计算任何一个四则表达式的值。
(除法取整即可,不必考虑小括号)例如:变量a的值为“23+3*32/2-65”。运行程序后输出此表达式的结果。
要求:综合应用字符串和Vector的相关知识。拆分出字符和數字之后便不會了....

解决方案 »

  1.   

    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
    拜托請解答,謝謝...
      

  2.   

    这个可是个经典的编程,计算器的实现,实现起来很麻烦的,要使用到栈,还要考虑到他的优先级。
    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);