【问题标题】:Boolean doesn't break for statement布尔值不会因为语句而中断
【发布时间】:2016-05-12 02:05:50
【问题描述】:

我是论坛新手,也是编程新手。 如果我的问题真的很基本,我提前道歉,但我对此很陌生,而且我必须在很短的时间内学到很多东西,所以我可能会错过一些概念。

关于我的问题, 我有一种方法应该检查矩阵是否仍有可用空间,如果找到则停止。

矩阵已经这样初始化了(我知道它可能在一行中,但是矩阵是在对象的构造函数中创建的)

protected char[][] matJeu = null;
matJeu = new char[10][10];

然后用一个 for 语句填充了像这样的空格,它工作得很好

方法如下

public boolean checkIfFull()
{
    boolean full = true;
    for (int i=0;i<matJeu.length || !full;i++)
    {
        for (int j=0;j<matJeu[i].length || !full ;j++)
        {
            if(matJeu[i][j]==' '){
                full = false;
            }
        }
    }
    return full;
} 

问题在于,当完整的布尔值变为 false 时,for 循环不会中断并最终导致 ArrayOutOfBounds 异常。如果矩阵已满,则仅返回 true。所以我可能错过了导致布尔值打破 for 循环的正确方法。

提前感谢您的宝贵时间。

【问题讨论】:

  • 为什么不用return false替换full = false
  • @BJ Myers 确实有效。非常感谢,但我仍然想知道在这种情况下如何打破 for 语句?如果我想用布尔值取消 for 语句,这是唯一的方法吗?
  • 删除for循环中的!full并将full = false;替换为return false;
  • @Jerry06 是的,确实有效,感谢您的回答。但是,我仍然想知道当前代码中的哪些内容不起作用。假设出于某种原因,我想在方法或类似的东西之外打破 for 语句。而且我必须用布尔值打破 for 语句。程序如何评估 !full 为真?
  • !true == false,同样,!false == true

标签: java if-statement for-loop boolean break


【解决方案1】:

循环的条件部分将导致循环继续,只要它返回true

只要点击full=false,然后点击!full==true,条件语句的计算结果将始终为true (anything || true == true),实质上是让您使用当前代码陷入无限循环。

要中断 for 循环,您需要将条件部分计算为 false

我不确定您打算循环做什么,因为根据上一段,停在第一个空格字符似乎不是您想要的。

【讨论】:

  • 好吧。不是 !full 与 full == false 相同吗?如果是这样,如何将其评估为真?
  • 如果full false,则full==false(或等效!full)计算结果为true
  • 这个矩阵应该用空格(中性)填充玩家 1 的 R 字符和玩家 2 的 B 字符。这个方法应该检查网格中是否还有空格,因为如果没有,那么那场比赛就是平局。而且我不希望该方法在找到空间后扫描整个网格。
  • 啊-您没有在问题中提及有关矩阵中其他字符的任何内容。只需关注您的条件何时应评估为真(循环应继续),以及何时应评估为假(循环应停止)。尝试将!full 之类的内容读为“未满”,并记住我在其他各种 cmets 中概述的逻辑规则。
  • 我了解,就我而言,您回答了我的问题。但我仍然想知道我如何才能达到这样的结果。我的意思是,如果两个条件之一为真,我的 for 语句将被破坏。这是现在的情况,“完整”布尔值变为假,因此 !full 语句随后被评估为真,因为 full 为假。那为什么 for 不停止呢?
【解决方案2】:

问题在于 for 循环中的 or 条件。

for (int i=0;i<matJeu.length || !full;i++)

这里,只要至少有一个条件为真,循环就会继续执行。

因为i&lt;mathJeu.length 仍然为真,所以循环继续执行,无论fulltrue 还是false

相反 - 你想要的是一个 and 条件。

for (int i=0;i<matJeu.length && full;i++)

这将告诉它“只要它低于数组长度并且我们检测到它仍然是满的,就继续循环”。

【讨论】:

  • 这和 Skip 的回答有同样的问题:你的逻辑不正确——在这种情况下循环甚至不会开始,因为full==true,这意味着!full 评估为假,anything &amp;&amp; false是假的。
  • @Chris Yip - 我刚刚注意到,现在正在处理。
猜你喜欢
  • 1970-01-01
  • 2016-08-29
  • 2013-03-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2012-08-16
  • 2019-10-04
  • 2021-10-16
相关资源
最近更新 更多