Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要么是新手犯的错误,要么是在java中误用了.equals_Java_String_Boolean - Fatal编程技术网

要么是新手犯的错误,要么是在java中误用了.equals

要么是新手犯的错误,要么是在java中误用了.equals,java,string,boolean,Java,String,Boolean,所以我正在制作一个TictaToe程序,我制作了一个方法来检查是否有3个棋子在一行,以检查游戏是否结束 public boolean hasWon() { if (tictac[0][0].equals(tictac[1][0]) && tictac[0][0].equals(tictac[2][0]) && tictac[1][0].equals(tictac[2][0])) { //Vertical return false;

所以我正在制作一个TictaToe程序,我制作了一个方法来检查是否有3个棋子在一行,以检查游戏是否结束

public boolean hasWon() {
    if (tictac[0][0].equals(tictac[1][0]) && tictac[0][0].equals(tictac[2][0]) && tictac[1][0].equals(tictac[2][0])) { //Vertical
        return false;
    } else if (tictac[0][1].equals(tictac[1][1]) && tictac[0][1].equals(tictac[2][1]) && tictac[1][1].equals(tictac[2][1])) { //Vertical
        return false;
    } else if (tictac[0][2].equals(tictac[1][2]) && tictac[0][2].equals(tictac[2][2]) && tictac[1][2].equals(tictac[2][2])) { //Vertical
        return false;

    } else if (tictac[0][0].equals(tictac[0][1]) && tictac[0][0].equals(tictac[0][2]) && tictac[0][1].equals(tictac[0][2])) { //Horizontal
        return false;
    } else if (tictac[1][0].equals(tictac[1][1]) && tictac[1][0].equals(tictac[1][2]) && tictac[1][1].equals(tictac[1][2])) { //Horizontal
        return false;
    } else if (tictac[2][0].equals(tictac[2][1]) && tictac[2][0].equals(tictac[2][2]) && tictac[2][1].equals(tictac[2][2])) { //Horizontal
        return false;

    } else if (tictac[0][0].equals(tictac[1][1]) && tictac[0][0].equals(tictac[2][2]) && tictac[1][1].equals(tictac[2][2])) { //Diagonal
        return false;
    } else if (tictac[0][2].equals(tictac[1][1]) && tictac[0][2].equals(tictac[2][0]) && tictac[1][1].equals(tictac[2][0])) { //Diagonal
        return false;

    } else {
        return true;
    }
}
这里的问题是,在这些条件下,我想如果,比如说,所有的索引“在一行中”,其中f.ex。十、 “X X X”这对玩家X来说是一场胜利。然而,我的程序要求,如果任何一种棋子连续填满3个棋子,则为赢家,f.ex。“xox”将结束游戏,这显然是错误的。 我误解了吗?平等


<>编辑:在精彩的反馈之后,有没有办法让IF语句忽略空白空间(“”)?

< P>你应该考虑创建一个类,<代码>板<代码>。让此类提供一个包含
getLines
的接口。这将返回一个
列表
。tic tac趾板有八条线:三条水平线、三条垂直线、两条对角线。创建一个方法
isWin(字符串播放器,Line)
。根据行单元格中玩家标记的计数是否为3,返回true或false


我猜你可以在与可怕的嵌套
if
相同的空间中编写整个内容,以及所有难以捉摸的
&&
子句,其功能将是显而易见的。(这也是封装的良好实践。)

如果某行上的三个值都相同,则程序返回true。因此,它在XOX上不会返回true。但是会在OOO、XXX和SpaceSpace上

前两个都可以,因为如果你在移动后检查,只有最后一个移动者可以有三个在一条线上并且赢。但三个空间是一个问题。在每个if中,您应该检查第一个单元格是否没有空间

它更长,但是如果你使用@ajb的建议,你甚至会缩短进度


至于结构,我建议使用比@syrion更简单的方法。制作一个数组行[5,3,2]。它有5行,每行3个单元格,每个单元格2个坐标。您可以在两个插入的循环中进行检查。这不是一种Java方式,但您可以将其作为第一步。或者您可以立即移动到一个更可读的结构-一个5行的列表=单元格数组=一对坐标。我不知道哪一个对你来说更简单。

给我们看看你的
等于
方法的声明有点离题,但是如果你比较三件事,你发现A等于B,A等于C,然后,您不需要检查B是否等于C。这是因为相等是可传递的。问题可能是,当一行中的三个事物相等时,您返回的是
false
,如果它们不相等,则返回
true
。这不是一种倒退吗?另一个问题:如果正方形为空,
tictac[i][j]
的值是多少?如果一行有三个空白方块,您不希望它返回
Win
!!您没有误解
等于
,但您误解了
。仔细查看您返回的内容。不,除非您的代码“不得不”错误运行。