算术运算动态到android中的方法?

时间:2016-10-18 03:28:20

标签: java math collections hashmap operators

我想动态执行算术运算(只有加法和减法),我有一个包含下面的操作的json  “操作”:“a + b”此键值是我的操作,这是动态意味着它也会像“operation”:“a + b + d-c + e” 但其中一个确定它只会带有加法和减法

我的值在 Hashmap 中,如

HashMap<String,String> map = new HashMap<String,String>();
map.put("a", "10");
map.put("b", "10");
map.put("c", "5");
map.put("d", "5");
map.put("e", "15");


[
    {
        "id": 15,
        "lable": "C__a_plus_b",
        "field": "b",
        "operator": "None",
        "inputType": "Number",
        "ids": "13",
        "operation": "a+b",
        "operations": "true"
    },
    {
        "id": 19,
        "lable": "F__c_plus_d",
        "field": "d",
        "operator": "None",
        "inputType": "Number",
        "ids": "17",
        "operation": "C__a_plus_b+d",
        "operations": "true"
    },
    {
        "id": 21,
        "lable": "d_c_f",
        "field": "F__c_plus_d",
        "operator": "None",
        "inputType": "Number",
        "ids": "19",
        "operation": "d+C__a_plus_b-F__c_plus_d",
        "operations": "true"
    }
]

1 个答案:

答案 0 :(得分:0)

您要实现的内容称为 interpreter 。 Interpreter是一个模拟计算机的程序。您必须考虑计算机的第一件事,无论是在硬件还是软件中实现,都是指令集。阅读一些关于此的文献,以了解存在哪种指令集。

然后,查看您提供的输入代码示例,我不得不承认它是一种非常糟糕的指令集格式。在良好的指令集中,每条指令都有不同的操作数和操作码字段。在这里我们可以看到只提供了一个操作数作为指令数据结构的字段(&#34;字段&#34;:&#34; b&#34;在第一条指令中)因此是无用的,字段&#34;操作员&#34;永远都说&#34;无&#34;并且也是无用的,并且必须从字段&#34; operation&#34;中检索所有信息,其值是文本。因此,您还需要实现一个 Parser ,在给定类似"d+C__a_plus_b-F__c_plus_d"的输入字符串的情况下,它会返回如下数据结构:

{"operator":"-",
 "leftOperand":
    {"operator:"+",
     "leftOperand":"d",
     "rightOperand":"C__a_plus_b"
    },
 "rightOperand":"F__c_plus_d"
}

我使用了JSON / Javasript表示,但它可以用任何编程语言表示,例如Java的。

如何在其他地方描述如何实现解析器的主题,我将在此处解释。

实际上,解析器不是生成数据结构,而是可以立即计算并返回输入表达式的值 - 我只强调它仍然是解析器而不是解释器。