对于一个计算器我正在制作一个带有运算符的数组,我需要知道时间符号是在分号后面还是之后。为此,我有以下代码(使用JQuery的inArray):
if ($.inArray('*', operators) < $.inArray(':', operators)) {
//Multiplication is before division so perform mulitplication
}
else {
//Division is before multiplication so perform division
}
现在这段代码在循环中运行,每次删除它从数组中找到的运算符。这意味着在某些时候阵列中只能有乘法而没有分割。在这种情况下,inArray函数将返回例如3用于乘法,并且-1用于除法。你得到了什么:
if (3 < -1) ---> false
所以它认为它找到了一个分裂标志,没有。
当它反过来时它也必须工作:没有多重复制,但只有部门。
我无法想出解决方案来解决这个问题,所以这就把我带到了这里。
答案 0 :(得分:0)
首先测试是否存在任何分割:
if ($.inArray(':', operators) == -1 || $.inArray('*', operators) < $.inArray(':', operators)) {
答案 1 :(得分:0)
为什么不使用使用运算符(字符串)作为键的哈希值并将优先级(整数)作为值返回?
某些运算符具有相同的优先级,如加号和减号。
这是precedence table for C++ operators,这比你需要的要多得多,但应该给你一个想法。
答案 2 :(得分:0)
一个快速而又脏的修复方法是为'-1'返回添加额外的检查。
var divIndex = $.inArray(":", operators)
var multiIndex == $.inArray('*', operators)
if (divIndex != -1 && multiIndex < divIndex) {
// multiplication is before division
} else if (divIndex == -1 && multiIndex != -1) {
// only multiplication left
} else if (divIndex != -1 && divIndex < multiIndex) {
// division before multiplication
}
答案 3 :(得分:0)
你试过这个吗?
if ($.inArray('*', operators) < $.inArray(':', operators) || $.inArray(':', operators < 0)) {
...