繁体   English   中英

布尔值不会破坏语句

[英]Boolean doesn't break for statement

我是这个论坛的新手,也是编程的新手。 如果我的问题确实很基础,我会提前道歉,但是我真的是新手,我必须在很短的时间内学到很多东西,所以我可能会错过一些概念。

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

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

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循环的正确方法。

预先感谢您的宝贵时间。

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

一旦点击full=false ,然后!full==true ,条件语句将始终为trueanything || true == true ),这实际上使您陷入了当前代码的无限循环。

要打破for循环,您需要将条件部分评估为false

我不确定您打算执行循环操作的原因,因为在第一个空格字符处停止似乎不像您根据上一段所希望的那样。

问题是您的for循环上的or条件。

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

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

因为i<mathJeu.length仍然为true,所以无论fulltrue还是false ,循环都会继续执行。

相反,您想要的是and条件。

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

这将告诉它“只要循环长度小于数组长度并且我们检测到它仍已满,就保持循环”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM