在Java中嵌套条件

时间:2017-12-04 16:00:44

标签: java

问题

给出以下代码:

if (enforceLength && rawContents.length != recordLength) {

现在,如果enforceLengthrawContentsrecordLength不匹配,则返回true并触发我们的警告系统。但是,我们的某些recordLength字符HEADER_DIFF字符长于rawContents.length

因此,我们希望在or上加rawContents.length,以便它可以匹配recordLengthrecordLength + HEADER_DIFF

问题

是否有直接的方法在if语句的第二部分创建OR条件?即如果rawContents.length不等于recordLength,它会触发警报,但如果recordLength恰好比预期的HEADER_DIFF更长,则不会触发警报。

尝试失败

一次尝试失败:

if (enforceLength && rawContents.length != recordLength + HEADER_DIFF 
  || rawContents.length != recordLength)

5 个答案:

答案 0 :(得分:2)

不正常的逻辑结

if (enforceLength && rawContents.length != recordLength
        && rawContents.length != recordLength + HEADER_DIFF) {

也许否定词更容易理解

if (enforceLength && !(rawContents.length == recordLength
        || rawContents.length == recordLength + HEADER_DIFF)) {

答案 1 :(得分:2)

这是一个经典的问题,试图通过对箭头模式的非理性恐惧将一个if语句折叠得过多。

当然这会更清楚。

    if (enforceLength) {
        // Can be correct or out by HEADER_DIFF
        if(!(rawContents.length == recordLength + HEADER_DIFF || rawContents.length == recordLength)) {

        }
    }

答案 2 :(得分:1)

如果两个条件都不成立则失败:

if (enforceLength && !(rawContents.length == recordLength + HEADER_DIFF || rawContents.length == recordLength))

答案 3 :(得分:1)

如果我正确理解您的问题,您只需要在OR周围使用括号,并将其替换为AND,如下:

if (enforceLength && (rawContents.length != recordLength && rawContents.length != recordLength + HEADER_DIFF))

答案 4 :(得分:0)

您是否考虑过使用嵌套的if?

if (enforceLength)
{
    if(test for header diff)
     {
        rawContents.length != recordLength + HEADER_DIFF 
     }

    else
    {
     rawContents.length != recordLength)
    }
}

理解起来更复杂但更容易理解。