0

我正在尝试使用 制作计算器(仅限代码)StringTokenizer,但我迷路了。我必须使计算器能够进行简单的数学运算(+-*)和其他一些不太基本的运算(log、sin、tan、exponential)。这段代码是一个基本数学的例子——我想先做基础,然后使用方法添加其他函数。

但是,我不知道如何进行操作,我在想也许开关可以完成这项工作,但是使用 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]);
  }
}
4

1 回答 1

0

首先你必须抽象地思考,你必须想出一个解决问题的过程。你如何解决“5*10+15/12”?你在小学时是如何被教导去解决问题的?想想你如何在自己的头脑中将问题分解为简单的步骤。您将能够在脑海中将这个过程翻译成循环、结构、if 语句、树和算法。

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

于 2012-04-26T22:14:19.187 回答