no he t probado esto, pero debería darle una idea general de la dirección que necesitas tomar.
Para que esto funcione, voy a asumir algunas cosas sobre el texto de la TextView
:
- El
TextView
consiste en líneas delimitadas con "\n"
.
- La primera línea no incluirá un operador (+, -, * o /).
- Después de la primera línea no puede haber un número variable de líneas en el
TextView
que serán todos incluir uno operador y uno número.
- Un operador siempre será el primero
Char
de una línea.
En primer lugar tenemos el texto:
String input = tv1.getText().toString();
Luego Dividimos que para cada línea:
String[] lines = input.split("\n");
Ahora tenemos que calcular el valor total:
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);
}
El método calcular debería verse así, suponiendo que conocemos el primer Char
de una línea es el operador:
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());
}
EDITAR
Así lo anterior como se indica en el comentario anterior significa "izquierda a derecha" de cálculo, haciendo caso omiso de la orden normal (+ y/antes + y -).
A continuación se hace el cálculo de la manera correcta:
String input = tv1.getText().toString();
input = input.replace("\n", "");
input = input.replace(" ", "");
int total = getValue(input);
El método getValue
es un método recursivo y debería tener este aspecto:
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);
}
casos especiales que el método recursivo no maneja :
- Si el primer número es negativo, por ejemplo -3 + 5 * 8.
- Operadores dobles, p. 3 * -6 o 5/-4.
También el hecho de que estamos usando Integers
puede dar algunos resultados "extraños" en algunos casos, como p. 5/3 = 1.
¿Quieres mostrar el resultado de la suma de esos números ..? – Mudassir
¿cuál es el problema? – freshDroid
mi pregunta es, tengo valor de 5 + 9 en una vista de texto como ya lo mencioné. Entonces, ¿cómo obtener este valor como tv.getText(). ToString(); –