使用StringTokenizer的Java控制台计算器

时间:2012-04-26 21:47:18

标签: java console calculator

我正在尝试使用StringTokenizer制作一个计算器(仅限代码),但我迷路了。我必须使计算器具有进行简单数学(+ - *)和其他一些不那么基本操作(log,sin,tan,指数)的可能性。这段代码是基本数学的一个例子 - 我首先要完成基础知识,然后使用方法添加其他函数。

然而,我不知道如何进行操作,我想可能一个开关可以完成这项工作,但是使用BEMDAS它会变得复杂。上面的代码只将操作数放在一个char数组中,而数字放在一个double数组中,然后我不知道如何继续。如果有人可以解释我如何继续这个,或指导我,我会很感激。

import java.util.StringTokenizer;
import java.io.*;

public class Calculator  {
  public static void main (String[] args) {     
    int i=0;
    int j=0;
    int n=0;
    int o=0;
    double num []= new double [100];
    char op[]=new char [100];
    String ops[]=new String [100];

    String x = "5*10+15/12";
    StringTokenizer st = new StringTokenizer(x, "*/-+", true);
    while(st.hasMoreTokens()){
      ops[j] =st.nextToken();
      j++;
    }

    for(i=0; i<j;i++){
      if(i%2==0){
        num[n]=Double.parseDouble(ops[i]);
        n++;
      }
      else{
        op[o]=ops[i].charAt(0);
        o++;
      }
    }

    for(i=0; i<n;i++)
      System.out.println(num[i]);

    for(i=0; i<o;i++)
      System.out.println(op[i]);
  }
}

1 个答案:

答案 0 :(得分:0)

首先,你必须抽象地思考,你必须考虑一个解决问题的过程。你如何解决“5 * 10 + 15/12”?你怎么教你在小学打破这个问题?想想你如何将问题分解为自己的简单步骤。您将能够将这个过程转化为循环,结构,if语句,树和算法。

首先,“ops”变量永远不会被赋值给任何东西,所以你的while循环什么都不做。您需要考虑的第一件事是如何获取操作,在这种情况下,星号,加号,并从该字符串中划分:“5 * 10 + 15/12”到该opts变量,以便您可以循环它们。