否则,如果逻辑流程

时间:2013-03-05 13:57:00

标签: java

我一直在假设if ... else if陈述被短路的情况下进行编程。也就是说,如果条件满足if语句,则不会访问else if语句。最近在我的一个程序中的行为正在引起质疑。这是代码,它迭代一个数组并检查数组中的每个值是否与其索引+1匹配:

        int[] boardCopy = this.getBoard();
        int length = boardCopy.length;
        for (int i = 0; i < length; i++) {
            //blank space must be in last position
            if (boardCopy[i] == 0 && i != length -1) return false;
            //out of order if value does not match index + 1 (zero indexed)
            else if (boardCopy[i] != i +1) {
                System.out.println("Out of order: " + boardCopy[i] + ", " + (i+1));
                return false;
            }
        }
        return true;

这是我正在测试它的数组:

int[] blocks = {1, 2, 3, 4, 5, 6, 7, 8, 0};

当我创建一个有序的板(值匹配索引+ 1且0位于最后位置)时,它返回false。我的print语句显示else if语句正在检查0位置,即使if语句逻辑已满足。

我对if/elseif逻辑流程的整个概念是不正确的?我的codeview即将破灭吗?

3 个答案:

答案 0 :(得分:1)

我建议您不要在评论部分无限讨论此广告,而是在以下几点添加println ...

  • for循环中的第一行(在您的第一个if之前)
  • 在第一个return false之前 - 您显然需要使用{}
  • 分隔此块

此图片应显示iboardCopy[i]length

的值

此外,请添加else块,println显示相同的内容。

识别每个println,以便了解正在打印的行(例如1: 2:的前缀等)

我很确定输出会很有启发性:)

答案 1 :(得分:1)

if (boardCopy[i] == 0 && i != length -1) return false;
    //out of order if value does not match index + 1 (zero indexed)
    else if (boardCopy[i] != i +1) {
        System.out.println("Out of order: " + boardCopy[i] + ", " + (i+1));
        return false;
    }
    return true;
}

您在上面运行上面的代码:

int[] blocks = {1, 2, 3, 4, 5, 6, 7, 8, 0};

这意味着length = 9

现在,当你查看数字时,你的第一个if语句将不会阻塞,直到你命中0.你的if语句的第一个条件是True。第二个是:i != length -1,或更好地说:i != 8。当循环到达你的0时,你的i的值设置为8.记住,在第一个循环中,i = 0。因此,使用blocks

集时,if语句将始终为true

答案 2 :(得分:1)

你的逻辑是有缺陷的: 如果我运行此代码,则会生成Out of order: 0, 9,这是有效的if-else逻辑。

i == 8,第一个条件的计算结果为false,因为8 != 9 - 1为false。

然后检查else子句,从board[8] != 9开始,你得到“乱序”。

我想你想要

    for (int i = 0; i < length; i++) {
        //blank space must be in last position
        if (boardCopy[i] == 0) {
            if (i != length -1) {
                return false;
            }
            continue;   // can be in an else block or omitted
        }
        //out of order if value does not match index + 1 (zero indexed)
        else if (boardCopy[i] != i +1) {
            System.out.println("Out of order: " + boardCopy[i] + ", " + (i+1));
            return false;
        }
    }