【发布时间】:2021-05-03 01:00:55
【问题描述】:
我正在为计算器制作表达式解析器。表达式将包含一个变量,例如,用户可以输入“x + 2”或“y^2”。我有一个switch语句,switch语句中的一种情况在检测到变量时会执行某个动作:
case variableSymbol:
if (expression.length() == 1)
{
rangeResult = x1;
break outer;
}
varFlag = true;
varPos = expresPos;
break;
最初,我在上述情况下硬编码了一个值“x”,但我想让用户选择他们使用哪个变量,所以在解析函数中添加了一个 char 参数,并将其命名为 variableSymbol。 这是函数的参数:
public static ArrayList<Double> parseRange(String expression, char variableSymbol, double x1, double x2, double step)
但是 Java 不允许变量作为 switch 语句中的 case。有没有办法解决?避免重写 switch 语句的解决方案是最好的,因为它有数百行长。感谢您的帮助。
【问题讨论】:
-
首先,几 百 行 switch-case 需要立即重构(只是为了这么长)。其次,如果值在编译时未知,您可以改用
if-else。但同样,您的if-else也会增长到数百行代码。所以,最好修复您的设计。 -
你的switch语句有几百行?!?!?我肯定会重新考虑您的设计,并提出更好的解决方案。
-
创建一些运算符类和一个你传递给运算符的工厂怎么样?这样,它将是包含 case 语句内部逻辑的运算符类。这将简化代码的可读性和维护成本。
-
我将研究代码重构,但大多数语句都是必要的。该计算器用于评估积分和导数,因此用户需要能够输入所有三角函数,以及指数泛函、自然对数和以 10 为底的对数,并且还必须能够对这些函数进行基本的算术运算函数,所以我认为我不能让它更短
标签: java switch-statement compile-time-constant