Android计算器给出了错误的答案
问题描述:
我正在制作一个android单行计算器。到目前为止,这个计算器在我用javascript,C++和c#编写时工作正常,但我无法让它在android(java)中工作。这里是我的代码:Android计算器给出了错误的答案
String seq = String.valueOf(sec.getText());
ArrayList<Integer> allNums = new ArrayList<Integer>();
int i = 0;
ArrayList<String> allSigns = new ArrayList<String>();
String currentNums = "";
for (i = 0; i< seq.length(); i++)
{
if (seq.charAt(i) != '+' && seq.charAt(i) != '-' && seq.charAt(i) != '*' && seq.charAt(i) != '/')
{
currentNums+=seq.charAt(i);
}
else
{
allNums.add(Integer.parseInt(currentNums));
currentNums="";
allSigns.add(String.valueOf(seq.charAt(i)));
}
}
allNums.add(Integer.parseInt(currentNums));
int result = (Integer)allNums.get(0);
for (i = 1; i <= allNums.size(); i++)
{
if (allSigns.get(i-1) == "+")
result+=allNums.get(i);
else if (allSigns.get(i-1) == "-")
result-=allNums.get(i);
else if (allSigns.get(i-1) == "*")
result*=allNums.get(i);
else if (allSigns.get(i-1) == "/")
result/=allNums.get(i);
else
{
sec.setText(String.valueOf(result));
break;
}
}
我打电话通过onClick事件的功能。该应用程序不会崩溃,但只会让我回答第一个数字。例如:34 + 31-4 * 8/1它返回34.任何想法?
答
您正在使用==
运算符来比较字符串值,这是不正确的。对于对象(包括字符串),==
比较引用以确定它们是否引用同一对象。
要比较两个字符串值,使用String#equals
代替:在java中
if ("+".equals(allSigns.get(i-1)))
答
字符串比较使用"oneString".equals("another")
不==
...
if (allSigns.get(i-1).equals("+"))
result+=allNums.get(i);
else if (allSigns.get(i-1).equals("-"))
result-=allNums.get(i);
else if (allSigns.get(i-1).equals("*"))
result*=allNums.get(i);
else if (allSigns.get(i-1).equals("/"))
result/=allNums.get(i);
else
....
应该这样做。
+0
嗯,我不知道。我试过了,但现在应用程序崩溃了。有任何想法吗? – 2013-05-06 21:31:22
嗯,我不知道。我试过了,但现在应用程序崩溃了。有任何想法吗?这也是为字符,或只是为字符串? – 2013-05-06 21:32:10
'allNums.get(i)'必须抛出一个'ArrayIndexOutOfBoundsException',因为你从'1'循环到'allNums.size()'。尝试将调用改为'allNums.get(i-1)',就像你在'allSigns'中做的那样。 – 2013-05-06 21:40:04
如果您打算从allNums.get(i)制作allNums.get(i-1),则无法使用。它们是不同的,因为符号总是比数字的数量少一个。希望你能理解我。 – 2013-05-06 21:48:18