我对编码很新,我需要一些帮助。我尝试做的是让用户输入这种类型的表达式:+(1 2 3)。它应该返回(1 + 2 + 3) - > 6.但是,由于某些原因,当我这样做时,它会返回" 150"。
代码是西班牙语,但是,它很容易理解。忽略所有其他声明的变量。
public void evaluar(){
// TODO Arreglar suma
Visualizador v = new Visualizador();
Node n = new Node();
String criterio = "";
criterio = v.DarExp("Ingrese la expresion");
int total = 0;
int suma = 0;
int resta = 0;
int multiplicacion = 1;
int division = 1;
if (criterio.charAt(0) == '+'){
criterio = criterio.replace("(", "");
criterio = criterio.replace(")", "");
criterio = criterio.replace("+", "");
criterio = criterio.replace(" ", "");
total = Integer.parseInt(criterio);
System.out.println(total);
for (int i = 0; i < criterio.length(); i++){
suma += criterio.charAt(i);
}
System.out.println(suma);
}
答案 0 :(得分:0)
尝试suma += criterio.charAt(1) - '0';
原因是:'1'
,即字符,与整数1
不同。检查ASCII表,你会看到我在说什么。
答案 1 :(得分:0)
添加char的ascii值
考虑
String criterio = "+123";
if (criterio.charAt(0) == '+'){
criterio = criterio.replace("(", "");
criterio = criterio.replace(")", "");
criterio = criterio.replace("+", "");
criterio = criterio.replace(" ", "");
int suma = 0;
for (int i = 0; i < criterio.length(); i++){
suma += criterio.charAt(i) - '0';
}
System.out.println(suma);
}
答案 2 :(得分:0)
在Java中,char
是一个整数,这意味着它具有整数值,并且可以在算术表达式中转换为int。
'1'
等于49 '2'
等于50 '3'
等于51 49,50和51的sume是150!
您可以使用Character.getNumericValue()
为这些字符获取正确的值。
suma += Character.getNumericValue(criterio.charAt(i));
答案 3 :(得分:0)
当数字大于10时,您的解决方案将失败。
split
" "
和令牌总和:
String criterio = "+(1 2 3)";
int suma = 0;
if (criterio.charAt(0) == '+'){
criterio = criterio.replace("(", "");
criterio = criterio.replace(")", "");
criterio = criterio.replace("+", "");
String[] tokens = criterio.split(" ");
for (String s : tokens) {
suma += Integer.parseInt(s);
}
System.out.println(suma);
}
或者更好地使用java 8:
suma = Arrays.stream(tokens).mapToInt(Integer::parseInt).sum();