使用字符串做数学
Using String to do Math
我正在尝试制作一个允许进行多项运算的计算器(例如 4+3-2+5)。我如何做到这一点的基本想法是使用这个循环:
for (int i = 0; i < nums.length; i++) {
switch (nums[i]) {
case add:
while (func.size() < i) {
func.add(0);
}
func.add(i, 1);
type = "+";
break;
//More cases for other operations
注意事项:nums.length 引用了一个数组,其中包含这样拆分的输入方程式:nums = equation.split("(?<=[-+*/%])|(?=[-+*/%])")
理想情况下,一旦我有了 'type' 值,我就可以让我的程序通过这样做来计算方程式:
for(int i = 1; i < nums.length; i++) {
ans = eq.get(0) type eq.get(func.indexOf(1)+i);
}
另外一个小提示:eq
是一个包含nums
.
所有值的arraylist
我几乎想做的是让 type
成为 +、- 等数学运算。我知道这段代码在我在这里展示的方式中被严重破坏,但它只是一些东西我很快写信来提供一个我想要完成的例子。我看过其他类似的问题,解决方案是使用 Math
class 并从中调用函数,但它在我的程序中不起作用。有人想过实现这一目标的方法吗?谢谢!
看来您正在尝试使用语法导向解释器而不是抽象解释器。我强烈建议您对此进行研究,特别是如果您希望计算器遵循操作顺序(我假设您这样做)。这是一个很好的例子:
https://lambda.uta.edu/cse5317/notes/node24.html
就我个人而言,与其通过将运算符视为定界符来拆分输入方程式,我认为使用手动指定的 类 构建构造函数会更容易。我将使由运算符(字符串)和整数参数组成的完整语句表达式开始,然后根据需要添加到它。类似于:
abstract class Expression {
class Equation extends Expression {
public String operator; //Operator
public Expression left; //Left hand side
public Expression right;//Right hand side
public Equation(String o, Expression l, Expression r) {operator = o, left = l, /n
right = r}; //Constructor for the Equation
}
然后您可以添加到它来为不同类型的方程式创建场景。请记住左侧、右侧和运算符是任意的。您也可以在左侧和右侧创建带有运算符的方程式,以允许进行多项运算。与您的设置方式完全不同,但希望这对您有所帮助。
我正在尝试制作一个允许进行多项运算的计算器(例如 4+3-2+5)。我如何做到这一点的基本想法是使用这个循环:
for (int i = 0; i < nums.length; i++) {
switch (nums[i]) {
case add:
while (func.size() < i) {
func.add(0);
}
func.add(i, 1);
type = "+";
break;
//More cases for other operations
注意事项:nums.length 引用了一个数组,其中包含这样拆分的输入方程式:nums = equation.split("(?<=[-+*/%])|(?=[-+*/%])")
理想情况下,一旦我有了 'type' 值,我就可以让我的程序通过这样做来计算方程式:
for(int i = 1; i < nums.length; i++) {
ans = eq.get(0) type eq.get(func.indexOf(1)+i);
}
另外一个小提示:eq
是一个包含nums
.
我几乎想做的是让 type
成为 +、- 等数学运算。我知道这段代码在我在这里展示的方式中被严重破坏,但它只是一些东西我很快写信来提供一个我想要完成的例子。我看过其他类似的问题,解决方案是使用 Math
class 并从中调用函数,但它在我的程序中不起作用。有人想过实现这一目标的方法吗?谢谢!
看来您正在尝试使用语法导向解释器而不是抽象解释器。我强烈建议您对此进行研究,特别是如果您希望计算器遵循操作顺序(我假设您这样做)。这是一个很好的例子:
https://lambda.uta.edu/cse5317/notes/node24.html
就我个人而言,与其通过将运算符视为定界符来拆分输入方程式,我认为使用手动指定的 类 构建构造函数会更容易。我将使由运算符(字符串)和整数参数组成的完整语句表达式开始,然后根据需要添加到它。类似于:
abstract class Expression {
class Equation extends Expression {
public String operator; //Operator
public Expression left; //Left hand side
public Expression right;//Right hand side
public Equation(String o, Expression l, Expression r) {operator = o, left = l, /n
right = r}; //Constructor for the Equation
}
然后您可以添加到它来为不同类型的方程式创建场景。请记住左侧、右侧和运算符是任意的。您也可以在左侧和右侧创建带有运算符的方程式,以允许进行多项运算。与您的设置方式完全不同,但希望这对您有所帮助。