【问题标题】:check decimal or point Java检查小数点或点 Java
【发布时间】: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


【解决方案1】:

按照您的result() 方法,total4 在开头设置为 0.0,并且在“。”时没有任何代码会更改它。遇到运算符。

错误是您正在处理“。”作为运营商。在解析循环中有特殊代码将其视为数字的一部分。您需要更改if (!Character.isDigit(c)) { 行,并处理数学逻辑。

【讨论】:

    【解决方案2】:

    如果您不需要实现任何特定算法,那么您可以使用:

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("js");        
    Object result = engine.eval("3+4");
    

    否则,您可能需要查看以下内容: Shunting Yard Algorithm

    【讨论】:

    • wajahat 兄弟我真的不明白你上面的代码你能简单解释一下吗?
    • JS 中的 eval 函数可以计算字符串,这些字符串是数学表达式。 Java可以加载JS引擎并使用eval函数。
    • 他的意思是,不要重新实现计算器,因为 JavaScript 引擎中提供了一个。这是有效的,但我认为没有帮助,因为您正在学习 java 而不仅仅是想利用 JS。
    • 是的,我就是这么说的,如果你只是将它用作更大程序的一部分,那么你可以使用 JS 引擎。
    • 是java怎么放到java中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多