【问题标题】:How to multiply 2 array items [duplicate]如何将2个数组项相乘[重复]
【发布时间】:2016-08-12 11:10:41
【问题描述】:

我正在制作一个 Android 应用程序,该应用程序最终将用作游戏的掷骰子。我有一个可以将方程式输入字符串的键盘。然后我将字符串解析为一个数组并需要计算方程。我正在使用 for 循环来遍历数组,但我不确定当乘法出现时如何处理。

举个例子:

String theEquation = "2 + 3 * 6";
String[] result = theEquation.split("\\s+");

所以我现在有一个包含 2、+、3、*、6 的数组。我将如何将其转化为 20 的答案?

我最初使用 for 循环来将整个数组相加。当它只是添加时,它工作得很好。但是当我加上乘法时,事情变得很奇怪。

【问题讨论】:

  • 你需要一个方程解析器。
  • 这是一个广泛的话题。您需要指定要支持哪种操作,允许哪些输入值等。出于好奇:为什么骰子游戏需要这样的东西?
  • 适用于龙与地下城。我用它代替各种不同的骰子。例如,我需要为我经常做的一件事掷 5-6 面骰子。我只有 1 个实际的 6 面模具。打开这个应用程序并点击“5 * d6”并让它计算滚动要容易得多。
  • 您可以检查您的结果数组是否包含 * 以首先进行操作。然后从数组中删除 * 之前和之后的元素并继续操作。

标签: java arrays math


【解决方案1】:

您可以使用javax.script.ScriptEngine

输出

20

查看此代码:

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class EvaluateExpr {
  public static void main(String[] args) throws Exception{
    ScriptEngineManager se = new ScriptEngineManager();
    ScriptEngine scriptengine = se.getEngineByName("JavaScript");
    String theEquation = "2 + 3 * 6";
    System.out.println(scriptengine.eval(theEquation));
    } 
}

【讨论】:

  • 公然将代码提供给脚本引擎只是要求进行代码注入攻击。
  • 我认为这 (StackOverflow) 不是进行验证的正确位置。那应该是一个不同的问题。我只是提供逻辑。
  • 只是指出常见的陷阱/危害
  • 你可以在网上搜索一个好的正则表达式来判断一个字符串是否是一个公式。
  • 使用eval不是个好主意,你只是在要求代码注入攻击
【解决方案2】:

您要求实现某种解释器,它基本上可以解释简单的数学符号并给出真实的结果。

如果你真的想自己开发一个基本的级别解释器,你可以在here找到一个非常好的用 Python 编写的示例(不用担心,python 非常容易阅读和理解)。

链接中的 Python 代码是这样工作的:

$ python calc1.py

计算> 3+4

7

计算> 3+5

8

计算> 3+9

12

计算>

还有另一个用 Java 编写的示例here

无论如何,您需要以某种方式计算 String 中给出的数学,因此@Raman 的答案非常适合您的问题的解决方案。

【讨论】:

    猜你喜欢
    • 2013-05-22
    • 2019-07-02
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多