【发布时间】:2017-03-15 18:27:17
【问题描述】:
我被分配创建一个 Java 程序,它读取一个字符串方程并计算它的值。但是到目前为止,我设法创建的代码只能计算个位数的整数。而且我不知道如何使更长的整数起作用。为了处理两位甚至三位数的整数,我的函数应该是什么样的?
public class Ex8 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
String e = "1 - 3 * 18 / 4 + 2";
double t = executeStringEquation(e);
System.out.println(e + " = "+t);
}
public static double executeStringEquation(String inputEquation)
{
if("".equals(inputEquation))
{
return 0;
}
else if(inputEquation.length() == 1)
{
return Integer.valueOf(inputEquation);
}
else
{
String _a = String.valueOf(inputEquation.charAt(0));
String _b = String.valueOf(inputEquation.charAt(1));
if("+".equals(_b) || "-".equals(_b) )
{
if("+".equals(_b))
{
return Integer.valueOf(_a) + executeStringEquation(inputEquation.substring(2));
}
else
{// "-"
return Integer.valueOf(_a) - executeStringEquation(inputEquation.substring(2));
}
}
else
{// "*" or "/"
boolean isMulti = ("*".equals(_b));
String _c = String.valueOf(inputEquation.charAt(2));
Integer tmp = 0;
if(isMulti)
{
tmp = Integer.valueOf(_a) * Integer.valueOf(_c);
}
else
{
tmp = Integer.valueOf(_a) / Integer.valueOf(_c);
}
String newStr = String.valueOf(tmp) + inputEquation.substring(3);
return executeStringEquation(newStr);
}
}
}
}
【问题讨论】:
-
所以这要么是一个简单的解决方案,要么是一个困难的解决方案。这就是编译器在捕获语法错误时所做的事情,这在 SO 答案中并不容易解释。它是否需要支持操作顺序?括号?多个变量?我假设它不是那么全功能,所以考虑使用
String.split()和String.indexOf()。 -
提供的方程“1 - 3 * 18 / 4 + 2”差不多就是这样,所以我想你推荐的函数会起作用。感谢您的快速回复,我会调查一下。
-
你需要徒手实现它吗?或者您可以使用 Java 引擎中预先设计的评估器类吗?
-
我需要徒手实现它,这次内置函数不会为我做。