Java比较数组中的元素

时间:2011-11-09 22:26:49

标签: java arrays if-statement

我正在创建一个基于文本的noughts并在java中穿越游戏,并希望确定获胜的情况。我已经在电路板上使用了一个数组,比如String [] board: -

[0] [1] [2]

[3] [4] [5]

[6] [7] [8]

我有一整套可能性,可以检查if语句中连续的3个值是否相同。

这是我所拥有的一个例子:

if ((board [0] != "" && board [0] == board [1] && board [1] == board [2])) {
return true
}

有没有办法用较少的代码执行相同的操作?

由于

2 个答案:

答案 0 :(得分:2)

你的想法可以通过

发出声音
  • 如果您确实要存储字符串,请使用.equals()代替==,或
  • 存储字符而不是字符串,在这种情况下==是安全的。

现在,如果你真的做了一个小游戏并且越过游戏,你有8个不同的获胜条件,如果你增长你当前的编码风格将有形式(这里我假设字符,而不是字符串):

winner = 
    (b[0] != ' ' && b[0] == b[1] && b[1] == b[2]) || 
    (b[3] != ' ' && b[3] == b[4] && b[4] == b[5]) ||
    ...
    (b[0] != ' ' && b[0] == b[4] && b[4] == b[8]);

其他方法可以做到这一点;我确定谷歌搜索tic-tac-toe或者naughts和crosses实现会向你展示很多。

如果你想获得幻想,有一种众所周知的技术,用2的幂“标记”每个细胞。然后通过将得分(即,查看玩家的位向量)相加并在八个获胜条件的集合上进行二元AND,您可以一次性确定获胜位置。

这是一个用于说明该技术的井字游戏的注释块。 (你没有要求实际的代码,所以我从答案中扣留那个):

/*
 * To determine a win condition, each square is "tagged"
 * from left to right, top to bottom, with successive
 * powers of 2.  Each cell thus represents an individual
 * bit in a 9-bit string, and a player's squares at any
 * given time can be represented as a unique 9-bit value.
 * A winner can thus be easily determined by checking
 * whether the player's current 9 bits have covered any
 * of the eight "three-in-a-row" combinations.
 *
 *     273                 84
 *        \               /
 *          1 |   2 |   4  = 7
 *       -----+-----+-----
 *          8 |  16 |  32  = 56
 *       -----+-----+-----
 *         64 | 128 | 256  = 448
 *       =================
 *         73   146   292
 *
 */
var wins = [7, 56, 448, 73, 146, 292, 273, 84];

这是JavaScript。对于Java,请使用

private static final int[] WINS = new int[]{7, 56, 448, 73, 146, 292, 273, 84};

如果这里的二进制逻辑方法不是您想要的,那么道歉;我认为这将是一个展示它的好地方,以防其他人登陆这个页面。

答案 1 :(得分:0)

您如何存储数据?作为弦乐? " X"和" O"?还是数字? 0,1?

像其他人一样说如果使用字符串(一个对象),==运算符将无效!您希望board[0].equals(....)使用==!board.equals(...)使用!=

话虽如此,使用Strings实际上并不适用于测试场景。我在高中时做过tic-tac-toe所以我知道你的痛苦。使用副本&粘贴它真的不需要花那么长时间来编写一个大的if语句来检查所有的行/列/诊断。顶部五到十分钟。

如果您对压缩代码更感兴趣,可能需要考虑使用数字,因为您可以使用数学来检查条件......

if (row is not empty) and
((sum of indexes in row == 3) player 1 wins) or
(sum of indexes in row == 0) player 2 wins
)

明白了吗?

另外,我建议的一个提示是使用二维数组(String[][]),这样您就可以更轻松地检查行/列了!