我的天堂」 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