java - 选择的 boolean 值问题

标签 java boolean logic boolean-logic boolean-operations

我正在尝试实现一些非常简单的东西(原则上),但我在实现时遇到了一些麻烦。

在我的程序中,用户必须在 1 至 4 个方向之间进行选择,这些方向应被排除。 对于每个方向,用户都可以选择要排除的值的数字范围(从 0 到 360)。 但不知怎的,我不知道如何以简单的方式做到这一点。

我的面板看起来像这样:A)

enter image description here

这是我想要实现的目标的一个简短示例。

我想要同样的结果:B)

enter image description here

至于这个(但它当然应该适用于所有 4 种情况):C)

enter image description here

您知道如何解决这个问题吗?或者一些提示? 任何帮助将不胜感激。 (如果您希望我提供我尝试过的代码,我会的)。

编辑:好的,你想要一些代码,这就是我所做的(但它没有按我想要的方式工作)。

content[i].getNwdMean() 是我想要与旋转器中的值进行比较的值,以查看我的点是否在禁区中。

buttons.chkExcludedA1、buttons.chkExcludedA2、buttons.chkExcludedA3 和buttons.chkExcludedA4 是要排除的方向的按钮。

buttons.getDir1A()、getDir2A、getDir3A、getDir4A、getDir1B、getDir2B、getDir3B、getDir4B 是存储在微调器中的值,在我的示例中为 C)、getDir1A = 180、getDir1B = 190; getDir2A = 190 和 getDir2B = 200。

    // Is supposed to check the interval in both sides.
public static boolean isBetween(double x, double a, double c)
{
    return(x > (a < c ? a : c) && x < (a > c ? a : c));
}

private boolean parsDirections(boolean state)
{
   boolean a1 = false, a2 = false, a3 = false, a4 = false;
   if (buttons.chkExcludedA1 == true || buttons.chkExcludedA2 == true ||  buttons.chkExcludedA3 == true || buttons.chkExcludedA4 == true)
    {
        if (isBetween(content[i].getNwdMean(), buttons.getDir1A(), buttons.getDir1B()) == false)
        {
            a1 = true;
        }
        else if (isBetween(content[i].getNwdMean(), buttons.getDir2A(), buttons.getDir2B()) == false)
        {
            a2 = true;
        }
        else if (isBetween(content[i].getNwdMean(), buttons.getDir3A(), buttons.getDir3B())== false)
        {
            a3 = true;
        }
        else if (isBetween(content[i].getNwdMean(), buttons.getDir4A(), buttons.getDir4B()) == false)
        {
            a4 = true;
        }
    }
            // Basic test to see if it prints what i want, but it doesn't.
    if (a4 == true && a2 == true)
    {
        print(state);
    }
    else if (a1 == true && a2 == false)
    {
        print(state);
    }
    else 
    {
        return state;
    }
    return state;
}

最佳答案

您应该检查每个 if 语句中的各个 chkExcludedAX(以及您的逻辑的其他问题)。

尝试这样的事情:

boolean excluded1 = buttons.chkExcludedA1 &&
    isBetween(content[i].getNwdMean(), buttons.getDir1A(), buttons.getDir1B()));
boolean excluded2 = buttons.chkExcludedA2 &&
    isBetween(content[i].getNwdMean(), buttons.getDir2A(), buttons.getDir2B()));
boolean excluded3 = buttons.chkExcludedA3 &&
    isBetween(content[i].getNwdMean(), buttons.getDir3A(), buttons.getDir3B()));
boolean excluded4 = buttons.chkExcludedA4 &&
    isBetween(content[i].getNwdMean(), buttons.getDir4A(), buttons.getDir4B()));

boolean excluded = (excluded1 || excluded2 || excluded3 || excluded4);

(优先考虑可读性而不是微优化)

或者您可以将它们全部合并到一个语句中:

boolean excluded =
  (buttons.chkExcludedA1 &&
   isBetween(content[i].getNwdMean(), buttons.getDir1A(), buttons.getDir1B())) ||
  (buttons.chkExcludedA2 &&
   isBetween(content[i].getNwdMean(), buttons.getDir2A(), buttons.getDir2B())) ||
  (buttons.chkExcludedA3 &&
   isBetween(content[i].getNwdMean(), buttons.getDir3A(), buttons.getDir3B())) ||
  (buttons.chkExcludedA4 &&
   isBetween(content[i].getNwdMean(), buttons.getDir4A(), buttons.getDir4B()));

关于java - 选择的 boolean 值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19997930/

相关文章:

java - 如何从 Java 代码创建 gml 文件

java - 检测并删除 ArrayList 中的重复项?

java - Spring Boot @Controller 拒绝与 @Autowired 一起工作

c - _Bool 有什么优势?

有点与 boolean 值的比较

javascript - 在 React 中切换值后重新激活它

javascript - 我使用什么技术将文本放入每个单独的选项卡?

java - Groovy Jersey 客户端无法解码 XML

java - 复选框——新 boolean 值(真/假)

r - 确定 TRUE 和 FALSE 序列中最后 TRUE 的位置