我正在尝试使用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]);
}
}
答案 0 :(得分:0)
首先,你必须抽象地思考,你必须考虑一个解决问题的过程。你如何解决“5 * 10 + 15/12”?你怎么教你在小学打破这个问题?想想你如何将问题分解为自己的简单步骤。您将能够将这个过程转化为循环,结构,if语句,树和算法。
首先,“ops”变量永远不会被赋值给任何东西,所以你的while循环什么都不做。您需要考虑的第一件事是如何获取操作,在这种情况下,星号,加号,并从该字符串中划分:“5 * 10 + 15/12”到该opts变量,以便您可以循环它们。