tôi thiên đường' t thử nghiệm này - nhưng nó sẽ cung cấp cho bạn một ý tưởng chung của hướng bạn cần thực hiện.
Để làm việc này, tôi sẽ giả định một vài điều về nội dung của TextView
:
- Các
TextView
gồm đường phân định với "\n"
.
- Dòng đầu tiên sẽ không bao gồm toán tử (+, -, * hoặc /).
- Sau dòng đầu tiên có thể có một số dòng thay đổi trong
TextView
, tất cả sẽ bao gồm một nhà điều hành và một số.
- Nhà điều hành sẽ là tuyến đầu tiên
Char
của một đường.
Đầu tiên chúng tôi nhận được văn bản:
String input = tv1.getText().toString();
Sau đó chúng tôi chia nó lên cho mỗi dòng:
String[] lines = input.split("\n");
Bây giờ chúng ta cần phải tính toán tổng giá trị:
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);
}
Phương pháp tính toán sẽ giống như thế này, giả sử rằng chúng ta biếtđầu tiêncủa một dòng là các nhà điều hành:
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
Vì vậy, bên trên như đã nêu trong bình luận dưới đây làm "trái sang phải" tính toán, không chấp hành lệnh bình thường (+ và/trước + và -).
Sau đây thực hiện việc tính đúng cách:
String input = tv1.getText().toString();
input = input.replace("\n", "");
input = input.replace(" ", "");
int total = getValue(input);
Phương pháp getValue
là một phương pháp đệ quy và nó sẽ giống như thế này:
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);
}
Trường hợp đặc biệt là phương pháp đệ quy không xử lý :
- Nếu số đầu tiên là số âm, ví dụ: -3 + 5 * 8.
- Các toán tử đôi, ví dụ: 3 * -6 hoặc 5/-4.
Thực tế, chúng tôi đang sử dụng Integers
có thể cung cấp một số kết quả "lẻ" trong một số trường hợp, ví dụ: 5/3 = 1.
Bạn có muốn hiển thị các kết quả của việc bổ sung các con số ..? – Mudassir
vấn đề là gì ?? – freshDroid
câu hỏi của tôi là, tôi có 5 + 9 giá trị trong một textview như tôi đã đề cập đến., Vì vậy, làm thế nào để có được giá trị này như tv.getText(). ToString(); –