si j'ai mis le texte dans textview de cette manière, ce qui n'est pas un problème:
tv.setText("" + ANS[i]);
ceci simplement en venant de cette façon.
String a = tv.getText().toString();
int A = Integer.parseInt(a);
Mais en cas de réglage de la valeur dans textView.
tv1.setText(" " + X[i] + "\n" + "+" + " " + Y[i]);
qui est comme ça
5
+9
J'ai un problème, cette valeur, comment l'obtenir.
Je n'ai pas testé cela - mais cela devrait vous donner une idée générale de la direction que vous devez prendre.
Pour que cela fonctionne, je vais supposer quelques choses à propos du texte de TextView
:
TextView
est constitué de lignes délimitées par "\n"
.TextView
qui incluront toutes n opérateur et n nombre.Char
d'une ligne.Nous obtenons d'abord le texte:
String input = tv1.getText().toString();
Ensuite, nous le divisons pour chaque ligne:
String[] lines = input.split( "\n" );
Maintenant, nous devons calculer la valeur 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 );
}
La méthode de calcul devrait ressembler à ceci, en supposant que nous savons que le premier Char
d'une ligne est l'opérateur:
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
Ainsi, ce qui précède, comme indiqué dans le commentaire ci-dessous, effectue un calcul "de gauche à droite", en ignorant l'ordre normal (+ et/avant + et -).
Ce qui suit fait le calcul dans le bon sens:
String input = tv1.getText().toString();
input = input.replace( "\n", "" );
input = input.replace( " ", "" );
int total = getValue( input );
La méthode getValue
est une méthode récursive et devrait ressembler à ceci:
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 );
}
Cas spéciaux que la méthode récursive ne gère pas:
De plus, le fait que nous utilisions Integers
pourrait donner des résultats "impairs" dans certains cas, par exemple. 5/3 = 1.
diviser avec le signe + comme ceci
String a = tv.getText().toString();
String aa[];
if(a.contains("+"))
aa = a.split("+");
maintenant convertir le tableau
Integer.parseInt(aa[0]); // and so on
Si c'est la somme de tous les nombres que vous voulez, j'ai créé pour vous un petit extrait qui peut gérer à la fois les + et - en utilisant une expression régulière (j'ai laissé des appels d'impression à l'intérieur pour aider à visualiser ce qui se passe):
final String string = " " + 5 + "\n" + "-" + " " + 9+"\n"+"+"+" "+5; //Or get the value from a TextView
final Pattern pattern = Pattern.compile("(-?).?(\\d+)");
Matcher matcher = pattern.matcher(string);
System.out.print(string);
System.out.print('\n');
int sum = 0;
while( matcher.find() ){
System.out.print(matcher.group(1));
System.out.print(matcher.group(2));
System.out.print('\n');
sum += Integer.parseInt(matcher.group(1)+matcher.group(2));
}
System.out.print("\nSum: "+sum);
Ce code imprime ce qui suit:
5
- 9
+ 5
5
-9
5
Sum: 1
Edit: désolé si j'ai mal compris votre question, il était un peu difficile de savoir ce que vous vouliez faire. J'ai supposé que vous vouliez obtenir la somme des nombres sous la forme d'un entier plutôt que d'une chaîne.
Edit2: pour séparer les numéros les uns des autres, procédez comme suit:
final String string = " " + 5 + "\n" + "-" + " " + 9+"\n"+"+"+" "+5; //Or get the value from a TextView
final Pattern pattern = Pattern.compile("(-?).?(\\d+)");
Matcher matcher = pattern.matcher(string);
ArrayList<Integer> numbers = new ArrayList<Integer>();
while( matcher.find() ){
numbers.add(Integer.parseInt(matcher.group(1)+matcher.group(2)));
}
Essayez comme ça.
tv1.setText(" " + Integer.toString(X[i]) + "\n" + "+" + " " + Integer.toString(Y[i]));
Vous devez faire ce qui suit:
a=a.replace("\n"," ");
a=a.trim();
String b[]=a.split("+");
int k=Integer.ValueOf(b[0]);
int l=Integer.ValueOf(b[1]);
int sum=k+l;