Java Else if逻辑流

Java Else if逻辑流,java,Java,我一直在编程,假设如果。。。否则,如果语句短路。也就是说,如果某个条件满足if语句,则不会访问else if语句。我最近在一个项目中的行为使这一点受到了质疑。下面是代码,它迭代数组并检查数组中的每个值是否与其索引+1匹配: int[] boardCopy = this.getBoard(); int length = boardCopy.length; for (int i = 0; i < length; i++) {

我一直在编程,假设
如果。。。否则,如果
语句短路。也就是说,如果某个条件满足
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;
当我创建一个有序的电路板(值匹配索引+1,0位于最后一个位置)时,它返回
false
。我的print语句显示
else if
语句正在检查0位置,即使
if
语句逻辑已实现


我对
if/elseif
逻辑流的整个概念是否不正确?我的代码视图即将被粉碎吗

我建议您在以下几点添加一个
println
,而不是在评论部分无限讨论这个问题

  • for
    循环中的第一行(在第一个if之前)
  • 在第一个
    返回false之前
    -显然需要用
    {}
此打印应显示
i
boardCopy[i]
length

另外,包括一个最后的
else
块,该块有一个
println
显示相同内容

识别每个
println
,以便知道打印的是哪一行(例如前缀为
1:
2:
等)


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

我建议您在以下几点添加一个
println
,而不是在评论部分无限讨论这个问题

  • for
    循环中的第一行(在第一个if之前)
  • 在第一个
    返回false之前
    -显然需要用
    {}
此打印应显示
i
boardCopy[i]
length

另外,包括一个最后的
else
块,该块有一个
println
显示相同内容

识别每个
println
,以便知道打印的是哪一行(例如前缀为
1:
2:
等)

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

您可以在以下服务器上运行上述代码:

int[] blocks = {1, 2, 3, 4, 5, 6, 7, 8, 0};
这意味着
length=9

现在,当您遍历这些数字时,您的第一个if语句将不会阻塞,直到您达到0。if语句的第一个条件是
True
。第二个是:
i!=长度-1,或者更好地说:
i!=8
。循环到达0时,
i
的值设置为8。记住,在第一个循环中,i=0。因此,对于
块集
,if语句将始终为true

您可以在以下服务器上运行上述代码:

int[] blocks = {1, 2, 3, 4, 5, 6, 7, 8, 0};
这意味着
length=9

现在,当您遍历这些数字时,您的第一个if语句将不会阻塞,直到您达到0。if语句的第一个条件是
True
。第二个是:
i!=长度-1,或者更好地说:
i!=8
。循环到达0时,
i
的值设置为8。记住,在第一个循环中,i=0。因此,对于
块集,if语句始终为true

您的逻辑有缺陷: 如果我运行这段代码,它会产生顺序错误的
:0,9
,如果逻辑为else,则这是有效的

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

然后检查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;
        }
    }
for(int i=0;i
您的逻辑有缺陷: 如果我运行这段代码,它会产生顺序错误的
:0,9
,如果逻辑为else,则这是有效的

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

然后检查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;
        }
    }
for(int i=0;i
如何使用单个索引迭代二维数组?Java允许吗?哦,对不起,伙计们,我将2D数组转换为1D数组,将进行编辑…好的,两个条件都返回false。您确定您的代码并不总是输入else if块吗?编辑:return语句意味着您退出该方法,因此我猜您的(&&I!=length-1)没有返回您希望它返回的内容;你的代码肯定是错的。但是,我们无法看到足够多的代码来找出错误所在。为上下文添加了更多代码,并显示了我在没有代码的情况下使用的1D数组。。。很高兴知道这些年来我的if/else逻辑都没有错。你怎么能用一个索引迭代二维数组呢?Java允许吗?对不起,伙计们,我将2D数组转换为1D数组,将编辑…w