如何在带有中缀后缀符号的计算器中添加三角函数?JAVA
我想做的是一个计算器,他们让我创建所有代码,我只能使用堆栈、队列或数学之类的库,但我不能使用已经解决了这个练习的库作为脚本,这就是为什么我选择使用中缀后缀符号,但最后我不知道如何添加三角函数 代码: 这是我或多或少想要计算的字符串,考虑到它必须用任何字符串来解析:如何在带有中缀后缀符号的计算器中添加三角函数?JAVA,java,Java,我想做的是一个计算器,他们让我创建所有代码,我只能使用堆栈、队列或数学之类的库,但我不能使用已经解决了这个练习的库作为脚本,这就是为什么我选择使用中缀后缀符号,但最后我不知道如何添加三角函数 代码: 这是我或多或少想要计算的字符串,考虑到它必须用任何字符串来解析: String a = "((1 + 2)^2 / (2 * 3)) + #(2 ^ (1 / 2))"; 这与写作是一样的: String a = "((1 + 2)^2 / (2 * 3)) + co
String a = "((1 + 2)^2 / (2 * 3)) + #(2 ^ (1 / 2))";
这与写作是一样的:
String a = "((1 + 2)^2 / (2 * 3)) + cos(2 ^ (1 / 2))";
最后,操作在哪里,我添加了一个案例,比如说#是cos,我希望它能解决它,但事实是我不知道如何解决:
public double evaluatePostfix(String postfixExpr)
{
char[] chars = postfixExpr.toCharArray();
Stack<Double> stack = new Stack<Double>();
for (char c : chars)
{
if (isOperand(c))
stack.push((double)(c - '0')); // convert char to int val
else if (isOperator(c))
{
double op1 = stack.pop();
double op2 = stack.pop();
double result;
switch (c)
{
case '*':
result = op1 * op2;
stack.push(result);
break;
case '/':
result = op2 / op1;
stack.push(result);
break;
case '+':
result = op1 + op2;
stack.push(result);
break;
case '-':
result = op2 - op1;
stack.push(result);
break;
case '^':
result = Math.pow(op2, op1);
stack.push(result);
break;
case '#':
result = Math.cos(op1);
stack.push(result);
break;
}
}
}
return stack.pop();
}
public-double-evaluatePostfix(字符串postfix-expr)
{
char[]chars=postfixExpr.toCharArray();
堆栈=新堆栈();
for(char c:chars)
{
if(等规数(c))
stack.push((双精度)(c-'0');//将字符转换为int val
else if(等温器(c))
{
double op1=stack.pop();
double op2=stack.pop();
双重结果;
开关(c)
{
案例“*”:
结果=op1*op2;
stack.push(结果);
打破
案例“/”:
结果=op2/op1;
stack.push(结果);
打破
格“+”:
结果=op1+op2;
stack.push(结果);
打破
案例'-':
结果=op2-op1;
stack.push(结果);
打破
案例‘^’:
结果=数学功率(op2,op1);
stack.push(结果);
打破
案例“#”:
结果=Math.cos(op1);
stack.push(结果);
打破
}
}
}
返回stack.pop();
}
但它根本就不是这样工作的。
还告诉他们,如果有一种方法可以直接以我选择的特殊字符的形式编写cos(),它将对我有更大的帮助。
如果您需要任何澄清,请告诉我,非常感谢。我认为您应该做的第一件事是在弹出操作数之前查看运算符,并确定该特定运算符要弹出多少个操作数。也许你可以编写一个
isUnaryOperator
函数,它类似于你的isOperator
函数。我想到给cos、sen、tan-as-cos->#、sin->$和tan->%赋予特殊字符,你可以在你的程序中这样做。换句话说,在解析字符串之前,将“cos”更改为“#”。但是,您将在某个时候用完特殊字符。那么@tgdavies的想法将是有用的。@tgdavies您能告诉我如何抽象您所说的吗?事实上,我愿意改变你告诉我的,但首先我必须更好地理解你,非常感谢你much@GilbertLeBlanc不用担心,我对字符串的更改没有问题,但我现在最需要的是理解如何在计算器中进行三角运算
String a = "((1 + 2)^2 / (2 * 3)) + cos(2 ^ (1 / 2))";
public double evaluatePostfix(String postfixExpr)
{
char[] chars = postfixExpr.toCharArray();
Stack<Double> stack = new Stack<Double>();
for (char c : chars)
{
if (isOperand(c))
stack.push((double)(c - '0')); // convert char to int val
else if (isOperator(c))
{
double op1 = stack.pop();
double op2 = stack.pop();
double result;
switch (c)
{
case '*':
result = op1 * op2;
stack.push(result);
break;
case '/':
result = op2 / op1;
stack.push(result);
break;
case '+':
result = op1 + op2;
stack.push(result);
break;
case '-':
result = op2 - op1;
stack.push(result);
break;
case '^':
result = Math.pow(op2, op1);
stack.push(result);
break;
case '#':
result = Math.cos(op1);
stack.push(result);
break;
}
}
}
return stack.pop();
}