首页 > 解决方案 > 用java创建正确的表达式

问题描述

我正面临一个问题,需要你的帮助。我有以下情况:

我有三个价值观:

boolean visible
int views
int executions

现在,我想创建一个表达式,hidden在我的数据库中设置为真或假。

我应该得到这个:

  1. 如果 visible 为真,则视图 <=4 或执行次数 <=5hidden = false

我的代码如下所示:

calculateHiddenFlag(boolean visible, int views, int executions) {
    return visible && (views <=4 || executions <=5);
}

有人可以支持我吗?

单元测试:

    @Test
public void calculateHiddenFlag_false_if_hidden_false() {
    assertFalse(ImportHelper.calculateHiddenFlag(false, 0, 0));
}

@Test
public void calculateHiddenFlag_true_if_hidden_true_and_views_leq4() {
    assertTrue(ImportHelper.calculateHiddenFlag(true, 4, 0));
}

@Test
public void calculateHiddenFlag_true_if_hidden_true_and_executions_leq5() {
    assertTrue(ImportHelper.calculateHiddenFlag(true, 0, 5));
}

@Test
public void calculateHiddenFlag_false_if_hidden_true_but_views_gt4() {
    assertFalse(ImportHelper.calculateHiddenFlag(true, 10, 0));
}

@Test
public void calculateHiddenFlag_false_if_hidden_true_but_executions_gt5() {
    assertFalse(ImportHelper.calculateHiddenFlag(true, 0, 10));
}

标签: javaregexoperatorsexpression

解决方案


(根据下面的评论编辑)

最初的声明应解释为

if visible is true AND views <= 4 OR executions <= 5 then hidden = false

并在添加括号以遵守逻辑运算符的优先级之后

if visible is true AND (views <= 4 OR executions <= 5) then hidden = false

因此,代码实际上就是您在阅读时所说的:

calculateHiddenFlag(boolean visible, int views, int executions) {
    return !(visible && (views<=4 || executions<=5));
}

或者根据逻辑运算符的优先级使用一些德摩根定律两次并删除括号

calculateHiddenFlag(boolean visible, int views, int executions) {
    return !visible || views>4 && executions>5;
}

推荐阅读