Je travaille sur l'évaluation d'une expression, et je rencontre des problèmes pour entrer des nombres négatifs. En raison de la structure de mon code, et le fait qu'un opérateur de soustraction et un signe négatif sont le même caractère, mon code ne fonctionne pas pour les nombres négatifs. Y a-t-il un moyen de contourner ce problème?Évaluer le code, en différenciant entre négatif et négatif?
private float evalNoPB(String s) {
float tempAns = 0;
if (s.contains("*") == false && s.contains("/") == false && s.contains("+") == false && s.contains("-") == false) {
return Float.parseFloat(s);
}
if (s.length() - 1 > 0) {
int i;
boolean foundPlusMinus = false;
for (i = s.length() - 1; i > 0; i--) {
if (s.charAt(i) == '+' || s.charAt(i) == '-') {
System.out.println(i);
foundPlusMinus = true;
break; // keep value of i for substrings
}
foundPlusMinus = false;
}
if (foundPlusMinus == false) { // for loop went through and did not find + or -
for (i = s.length() - 1; i > 0; i--) {
if (s.charAt(i) == '*' || s.charAt(i) == '/') {
System.out.println(i);
break; // keep value of i for substrings
}
}
}
String sub1 = s.substring(0, i);
System.out.println(sub1);
String sub2 = s.substring(i + 1, s.length());
System.out.println(sub2);
if (s.charAt(i) == '+') {
tempAns = evalNoPB(sub1) + evalNoPB(sub2);
} else if (s.charAt(i) == '-') {
tempAns = evalNoPB(sub1) - evalNoPB(sub2);
} else if (s.charAt(i) == '*') {
tempAns = evalNoPB(sub1) * evalNoPB(sub2);
} else if (s.charAt(i) == '/') {
float divisorCheck = evalNoPB(sub2);
if (divisorCheck != 0) {
tempAns = evalNoPB(sub1)/evalNoPB(sub2);
} else { // cannot divide by 0
throw new IllegalArgumentException("cannot divide by 0");
}
}
}
return tempAns;
}
Pouvez-vous être plus clair sur votre problème? !!! –
Ce code évalue une expression String. Cela fonctionne pour une chaîne comme '3 * 4 + 5' mais pas pour une chaîne comme' -3 * 4 + 5' car le signe négatif est traité comme un opérateur de soustraction. C'est ce que j'ai besoin de corriger –
Jetez tout cela et cherchez 'l'analyseur d'expression de descente récursive' ou l'algorithme Dijkstra Shunting-yard. Vous ne serez jamais là d'ici. – EJP