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
,而不是在评论部分无限讨论这个问题
循环中的第一行(在第一个if之前)for
- 在第一个
-显然需要用返回false之前
{}
i
,boardCopy[i]
,length
另外,包括一个最后的else
块,该块有一个println
显示相同内容
识别每个println
,以便知道打印的是哪一行(例如前缀为1:
2:
等)
我很确定输出会很有启发性:)我建议您在以下几点添加一个
println
,而不是在评论部分无限讨论这个问题
循环中的第一行(在第一个if之前)for
- 在第一个
-显然需要用返回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