java我正在学习使用安卓 studio制作一个应用程序,所以我正在制作一个简单的计算器,但我遇到了一个获得正确答案的问题
我试过几种方法让它工作,但它返回的答案是非常错误的。例如,它返回1+2=99.0和1*2=2450.0,以此类推。。所有的按钮都能工作,我认为主要的方法很好。下面是我在单击equals按钮时将TextView中的CharSequence转换为字符串的方式
Button btnEquals = (Button)findViewById(R.id.btnEquals);
btnEquals.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String problem = textDisplay.getText().toString();
double intermediate = evalProblem(problem);
String answer = "" + intermediate;
textDisplay.setText(answer);
}
});
这就是我调用的方法,用来计算方程
public static Double evalProblem(String s) {
double output;
double mult = 0.0;
double add = 0.0;
double sub = 0.0;
double div = 0.0;
if (s.contains("*")) {
int x = s.indexOf("*");
mult = s.charAt(x-1)*s.charAt(x+1);
}
if (s.contains("/")) {
int x = s.indexOf("/");
div = s.charAt(x - 1) / s.charAt(x + 1);
}
if (s.contains("+")) {
int x = s.indexOf(("+"));
add = s.charAt(x-1) + s.charAt(x+1);
}
if (s.contains("-")) {
int x = s.indexOf("-");
sub = s.charAt(x - 1) - s.charAt(x + 1);
}
output = mult + add + sub + div;
return output;
}
# 1 楼答案
.charAt()
返回字符,而不是整数。例如,“8*8”有三个字符——“8”、“8”和“8”。当对字符执行数学运算时,它使用字符的ASCII值,例如:'A'
的ASCII值为65'0'
的值为48因此,‘1’+‘2’=49+50=99
需要将“*”前面的字符串部分转换为数字,对吗?Java有一个简单的解决方案:
Double.parseDouble()
方法:要解决您的特定问题,您应该尝试以下方法:
这个解决方案最好的部分是,您可以使用多个数字的数字,因为代码在
s
中取“*”之前和之后的所有内容,并将它们转换为数字<强>编辑:下面的注释中提到了U/MARKSLASE,您应该考虑使用java中的内置解析库,如这里所见:Algebra equation parser for java
编辑2:我曾建议使用
Integer.parseInt()
将字符串转换为数字,但正如u/MartinZeitler在下面的评论中指出的那样,使用Double.parseDouble()
将字符串转换为双精度值会更好