Цикл по 2 различным массивам для оценки состояния в Java - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь создать логи c в базе данных, которая создает правила для определенных полей, а затем создает логи условий c на основе этих правил в Java.

Example1:

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

например, выше, я хочу проверить, если (истина ИЛИ ложь И истина), просматривая массивы в java. Я знаю, что приведенный ниже код, который я использовал, полностью неверен для этого требования и не соответствует моему необходимому условию ie if (true ИЛИ false И 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;
             }
        }
    }
}

Длина массива изменится, но будет следовать той же схеме, как показано ниже:

Example2:

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

Example3:

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]

1 Ответ

2 голосов
/ 18 апреля 2020

Вам не нужно l oop для двух массивов, потому что вы всегда ожидаете, что массив с аргументами будет на один элемент длиннее массива с операторами:

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}));
    }
}

Вывод:

true
false
false
...