繁体   English   中英

循环遍历 2 个不同的 Arrays 以评估 Java 中的条件

[英]Looping through 2 different Arrays to evaluate a condition in Java

我正在尝试在数据库中创建一个逻辑,为某些字段创建规则,然后根据 Java 中的这些规则创建条件逻辑。

示例 1:

List1 = [OR, AND]
List2 = [true, false, true]

例如在上面我想通过在 java 中循环遍历 arrays 来检查是否(真或假和真)。 我知道我使用的以下代码对于这个要求是完全错误的,并且没有评估我要求的条件,即 if(true OR false AND true)。

请注意,我只希望 Java 中的此代码不是脚本语言。

boolean previousResult = false;
   for(int i=0;i<List1.size();i++) {
     for(int j=0; j<List2.size();j++){
        if(List1.get(i) == "OR"){
            if(true || false){
                previousResult = true;
            }
        }else{ 
            if(previousResult && true){
              previousResult = true;
             }
        }
    }
}

数组长度会改变,但会遵循以下相同的模式:

示例 2:

List1 = [OR, AND, OR]
List2 = [true, false, true, false]

示例 3:

List1 = [OR, AND, OR, AND]
List2 = [true, false, true, false, true]

示例 4:

List1 = [OR, AND, OR, AND, OR]
List2 = [true, false, true, false, true, false]

您不需要遍历两个 arrays,因为您总是希望您的数组与 arguments 比具有运算符的数组长一个元素:

class Playground {
    static enum BinaryOp {
        OR,
        AND
    }

    private static boolean evaluate(BinaryOp[] ops, Boolean[] vals) {
        assert vals.length > 1;
        assert ops.length == vals.length - 1;
        boolean result = vals[0];
        for (int i = 0; i < ops.length; i++) {
            if (ops[i].equals(BinaryOp.OR)) {
                result = result || vals[i + 1];
            } else {
                result = result && vals[i + 1];
            }
        }
        return result;
    }

    public static void main(String[ ] args) {
        System.out.println(
            evaluate(
                new BinaryOp[] {BinaryOp.OR}, 
                new Boolean[] {false, true}));
        System.out.println(
            evaluate(
                new BinaryOp[] {BinaryOp.AND}, 
                new Boolean[] {false, true}));
        System.out.println(
            evaluate(
                new BinaryOp[] {BinaryOp.AND, BinaryOp.OR}, 
                new Boolean[] {false, true, false}));
    }
}

Output:

true
false
false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM