【发布时间】:2015-01-06 06:01:26
【问题描述】:
我正在做一个计算器项目。 我正在使用一种方法来分隔字符和数值。 但是当我有一个十进制值时我遇到了问题,因为当十进制值运行时结果显示为 0。 这是代码。
List<Double> numbers = new ArrayList<>();
List<Character> operators = new ArrayList<>();
..................
void testing() {
String userInput = "234+234+234";
/* ignore the line above its just for understanding */
/*the above works fine but if we change it to below its dont work.*/
String userInput = "234+2.3+4.2";
/* The both lines above are just for understanding actually i am getting text from edittext*/
String userInput = currentcalc.getText().toString();
for (char c : userInput.toCharArray()) {
if (!Character.isDigit(c)) {
s1 = Double.parseDouble(s2);
numbers.add(s1);
operators.add(c);
handler++;
s2 = "";
s1 = 0;
} else {
s = Character.toString(c);
s2 += s;
}
}
result();
}
结果 = 0.0
s 和 s2 是字符串,s1 是双精度。在我的代码中,如果 c 不是数字,则它正在保存 +、- 等运算符的值,否则它正在保存数字和其他东西的值。我想知道为什么“。”没有通过此代码保存,为什么结果显示 0.0
结果();代码在下面
void result() {
double total4 = 0;
s1 = Double.parseDouble(s2);
numbers.add(s1);
if (handler < 1) {
total4 = Double.parseDouble(currentcalc.getText().toString());
} else {
int i = 0;
for (i = 0; i < handler; i++) {
switch (operators.get(i)) {
case '/':
total3 = numbers.get(i) / numbers.get(i + 1);
total4 = total3;
numbers.remove(i + 1);
numbers.set(i, total4);
operators.remove(i);
handler--;
i--;
break;
}
}
for (i = 0; i < handler; i++) {
switch (operators.get(i)) {
case '*':
total3 = numbers.get(i) * numbers.get(i + 1);
total4 = total3;
numbers.remove(i + 1);
numbers.set(i, total4);
operators.remove(i);
handler--;
i--;
break;
}
}
for (i = 0; i < handler; i++) {
switch (operators.get(i)) {
case '+':
total3 = numbers.get(i) + numbers.get(i + 1);
total4 = total3;
numbers.remove(i + 1);
numbers.set(i, total4);
operators.remove(i);
break;
case '-':
total3 = numbers.get(i) - numbers.get(i + 1);
total4 = total3;
numbers.remove(i + 1);
numbers.set(i, total4);
operators.remove(i);
break;
}
handler--;
i--;
}
}
et1.setText(Double.toString(total4));
resettext = 1;
}
【问题讨论】:
-
您的代码在尝试执行“.”时会做什么运营商?目前,您正在治疗“。”作为运算符,就像“+”一样。
-
使用 Java 中可用的 javascript 引擎来评估表达式。
-
s 和 s2 是字符串,s1 是双精度。在我的代码中,如果 c 不是数字,则它正在保存 +、- 等运算符的值,否则它正在保存数字和其他东西的值。我想知道为什么“。”没有通过此代码保存,为什么结果显示 0.0
-
您的代码看起来令人困惑和错误。您需要一些数据结构来正确执行此操作,2 个堆栈或堆栈和队列,并将等式转换为后缀。 1 + 2 -> 1 2 +。
-
这到底是什么语言?您没有使用任何语言标签,并且您的降价显示为 javascript,但我不认为该代码是 javascript...
标签: arrays calculator