Mi rifugio' Ho provato questo - ma dovrebbe darti un'idea generale di la direzione che devi seguire.
Per far funzionare tutto questo, ho intenzione di assumere alcune cose circa il testo del TextView
:
- La
TextView
costituito da linee delimitate con "\n"
.
- La prima riga non include un operatore (+, -, * o /).
- Dopo la prima riga non ci può essere un numero variabile di righe nel
TextView
che saranno tutti includere uno operatore e uno numero.
- Un operatore sarà sempre il primo
Char
di una linea.
Per prima cosa ottenere il testo:
String input = tv1.getText().toString();
Poi abbiamo diviso in su per ogni linea:
String[] lines = input.split("\n");
Ora abbiamo bisogno di calcolare il valore totale:
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);
}
Il metodo di calcolo dovrebbe assomigliare a questo, supponendo che conosciamo il primo Char
di una linea è l'operatore:
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
Quindi il comando precedente come indicato nel commento qui sotto fa calcolo "da sinistra a destra", ignorando l'ordine normale (+ e/prima di + e -).
Quanto segue fa il calcolo nel modo giusto:
String input = tv1.getText().toString();
input = input.replace("\n", "");
input = input.replace(" ", "");
int total = getValue(input);
Il metodo getValue
è un metodo ricorsivo e dovrebbe assomigliare a questo:
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);
}
Casi particolari che il metodo ricorsivo non gestisce :
- Se il primo numero è negativo, ad es. -3 + 5 * 8.
- Doppi operatori, ad es. 3 * -6 o 5/-4.
Anche il fatto che stiamo usando Integers
potrebbe dare alcuni risultati "dispari" in alcuni casi come ad es. 5/3 = 1.
Vuoi mostrare il risultato dell'addizione di quei numeri ..? – Mudassir
qual è il problema ?? – freshDroid
la mia domanda è, ho 5 + 9 valore in una vista testuale come già detto., Quindi come ottenere questo valore come tv.getText(). ToString(); –