我的天堂” t测试了这个 - 但它应该给你一个总体的想法你需要采取的方向。
对于这项工作,我将承担有关TextView
文本的几件事情:
- 的
TextView
包括与"\n"
分隔线。
- 第一行不包含运算符(+, - ,*或/)。
- 第一行后,有可在
TextView
线的可变数量,这将所有包括一个操作者和一个数。
- 运营商将是一条线路的第一个
Char
。
首先我们得到的文本:
String input = tv1.getText().toString();
然后我们把它分解为每个行:
String[] lines = input.split("\n");
现在我们需要计算出总价值:
int total = Integer.parseInt(lines[0].trim()); //We know this is a number.
for(int i = 1; i < lines.length(); i++) {
total = calculate(lines[i].trim(), total);
}
计算方法应该是这样的,假设我们知道第一个一行的是运营商:
private int calculate(String input, int total) {
switch(input.charAt(0))
case '+':
return total + Integer.parseInt(input.substring(1, input.length());
case '-':
return total - Integer.parseInt(input.substring(1, input.length());
case '*':
return total * Integer.parseInt(input.substring(1, input.length());
case '/':
return total/Integer.parseInt(input.substring(1, input.length());
}
EDIT
因此,作为在注释中所述的上述下面做“左到右”的计算,忽略了正常顺序(+和/之前和 - )。
下做计算的正确方法:
String input = tv1.getText().toString();
input = input.replace("\n", "");
input = input.replace(" ", "");
int total = getValue(input);
方法getValue
是一个递归方法,它应该是这样的:
private int getValue(String line) {
int value = 0;
if(line.contains("+")) {
String[] lines = line.split("\\+");
value += getValue(lines[0]);
for(int i = 1; i < lines.length; i++)
value += getValue(lines[i]);
return value;
}
if(line.contains("-")) {
String[] lines = line.split("\\-");
value += getValue(lines[0]);
for(int i = 1; i < lines.length; i++)
value -= getValue(lines[i]);
return value;
}
if(line.contains("*")) {
String[] lines = line.split("\\*");
value += getValue(lines[0]);
for(int i = 1; i < lines.length; i++)
value *= getValue(lines[i]);
return value;
}
if(line.contains("/")) {
String[] lines = line.split("\\/");
value += getValue(lines[0]);
for(int i = 1; i < lines.length; i++)
value /= getValue(lines[i]);
return value;
}
return Integer.parseInt(line);
}
特殊情况,该递归方法不处理:
- 如果第一个数字是负的例如-3 + 5 * 8。
- 双操作员例如3 * -6或5/-4。
另外我们使用的事实Integers
可能会在某些情况下给出一些“奇怪”的结果,例如, 5/3 = 1.
你想显示除了这些数字的结果..? – Mudassir 2011-12-15 09:27:32
有什么问题? – freshDroid 2011-12-15 09:28:00
我的问题是,我在一个textview中有5 + 9的值,因为我已经提到过,所以如何获得像tv.getText()。toString()这样的值。 – 2011-12-15 09:33:41