作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在数据库中创建一个逻辑,为某些字段创建规则,然后根据 Java 中的这些规则创建条件逻辑。
示例1:
List1 = [OR, AND]
List2 = [true, false, true]
例如上面我想通过循环遍历java中的数组来检查if (true OR false AND true)。我知道我使用的下面的代码对于这个要求是完全错误的,并且没有评估我所需的条件,即 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]
最佳答案
您不需要循环两个数组,因为您总是希望带有参数的数组比带有运算符的数组长一个元素:
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
关于java - 循环遍历 2 个不同的数组来评估 Java 中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61281966/
我是一名优秀的程序员,十分优秀!