Java 无法计算两位数
到目前为止,我有一种求值方法,可以对字符串进行加、减、乘,例如5*5。但是,当我尝试用三位数5*10来计算一个数字时,它返回5而不是50。我认为我的问题是,它只取两位数的第一个字符串,并进行相应的计算。有什么想法吗 这是我的密码:Java 无法计算两位数,java,for-loop,evaluate,Java,For Loop,Evaluate,到目前为止,我有一种求值方法,可以对字符串进行加、减、乘,例如5*5。但是,当我尝试用三位数5*10来计算一个数字时,它返回5而不是50。我认为我的问题是,它只取两位数的第一个字符串,并进行相应的计算。有什么想法吗 这是我的密码: public double evaluate(String exp){ String left = ""; String right = ""; double leftValue = 0; double
public double evaluate(String exp){
String left = "";
String right = "";
double leftValue = 0;
double rightValue = 0;
double answer = 0;
//ensures expression matches an appropriate expression (i.e. 2+2, not "2"
if(exp.length()==1)
{
//if single digit, return double value
return Double.parseDouble(exp);
}
//searching for a "+"
for(int i=0;i<exp.length();i++)
{
if(exp.charAt(i)=='+')
{
right = exp.substring(i+1, exp.length());
leftValue = subtract(left);
rightValue = evaluate(right);
answer = leftValue + rightValue;
return answer;
}
else
{
left = left + exp.substring(i,(i+1));
}
} // End for loop
answer = subtract(exp);
return answer;
} // End evaluate method
// Guaranteed there are no addition operators in exp
public double subtract(String exp){
String leftString = "";
String rightString = "";
double leftValue = 0;
double rightValue = 0;
double answer = 0;
for(int i=exp.length()-1;i>=0;i--)
{
if(exp.charAt(i)=='-')
{
// Convert rightString into Double
rightValue = Double.parseDouble(rightString);
leftString = exp.substring(0,i);
leftValue=subtract(leftString);
answer = leftValue - rightValue;
return answer;
}
else
// Accumulating the right string
{
rightString = rightString + exp.substring(i,(i+1));
}
} // End for loop
answer= multiply(exp);
return answer;
...then the code goes onto multiplication, etc....
} // End evaluate method
您可以使用ScriptEngine类并将其作为javascript字符串进行计算
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("5*10");
您可以使用ScriptEngine类并将其作为javascript字符串进行计算
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("5*10");
在减法中,向后构建rightString字符串,即将5*10转换为01*5=5。
您可能需要改变这一点:
// Accumulating the right string
{
rightString = rightString + exp.substring(i,(i+1));
}
为此:
// Accumulating the right string
{
rightString = exp.substring(i,(i+1)) + rightString;
}
在减法中,向后构建rightString字符串,即将5*10转换为01*5=5。
您可能需要改变这一点:
// Accumulating the right string
{
rightString = rightString + exp.substring(i,(i+1));
}
为此:
// Accumulating the right string
{
rightString = exp.substring(i,(i+1)) + rightString;
}
必须这样做吗?你可以用更简单的方式来做这件事,让我们换一种方式来评论@StinePike。你做错了。您可以修复这个小错误,但随后会遇到其他更严重的障碍:运算符优先级和括号,因此您必须重新开始。现在就做。您需要查找“递归下降表达式解析器”和“Dijkstra调车场算法”。@user2297666:如果以下答案之一帮助您解决了问题或解决了问题,请将其标记为已接受,因此,将来遇到类似问题的用户将能够很容易地发现它。@user2297666:Hm……从您的大多数问题来看,您似乎有点反对将答案标记为已接受!我可以问一下为什么吗?一定要这样做吗?你可以用更简单的方式来做这件事,让我们换一种方式来评论@StinePike。你做错了。您可以修复这个小错误,但随后会遇到其他更严重的障碍:运算符优先级和括号,因此您必须重新开始。现在就做。您需要查找“递归下降表达式解析器”和“Dijkstra调车场算法”。@user2297666:如果以下答案之一帮助您解决了问题或解决了问题,请将其标记为已接受,因此,将来遇到类似问题的用户将能够很容易地发现它。@user2297666:Hm……从您的大多数问题来看,您似乎有点反对将答案标记为已接受!我可以问一下为什么吗?