要么是新手犯的错误,要么是在java中误用了.equals
所以我正在制作一个TictaToe程序,我制作了一个方法来检查是否有3个棋子在一行,以检查游戏是否结束要么是新手犯的错误,要么是在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;
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
!!您没有误解等于
,但您误解了假
和真
。仔细查看您返回的内容。不,除非您的代码“不得不”错误运行。