1

几周前我开始在 java/android 中编程。我想编写一个小型井字游戏作为 android 应用程序,但我在检查获胜者的方法时遇到了问题。如下:

 public void checkForWinner() { 

        if( taken[0] && taken[3] && taken[6]  ||
            taken[0] && taken[1] && taken[2] ||
            taken[2] && taken[5] && taken[8] ||
            taken[6] && taken[7] && taken[8] ||
            taken[0] && taken[4] && taken[8] ||
            taken[2] && taken[4] && taken[6] ||
            taken[1] && taken[4] && taken[7] ||
            taken[3] && taken[4] && taken[5] == 1 ){}
}

在这里,我有一个名为 take 的数组,它包含 9 个整数,每个整数要么是一,意味着玩家一拥有该块,要么是二,意味着玩家二拥有该块。目前,我正在尝试所有可能的情况,其中玩家一将成为赢家,但日食告诉我The operator && is undefined for the argument type(s) int, int。该错误似乎仅针对 if 语句的每一行的第一个逻辑和操作显示。例如,第一个错误上升到taken[0] && taken[3]然后消失,直到下一行。

4

6 回答 6

3

或者,您可以检查 take[n] 值以查看它们是 1 还是 2,如果您认为这会使您的代码更清晰:

(taken[0]==1 && taken[3]==1 && taken[6]==1)

请记住,&& 运算符需要布尔操作数......因此它不会像您期望的那样与您的 int 数组一起使用。

于 2012-06-28T19:46:59.340 回答
2

将您的 && 交换为 ==,您正在尝试查看它们是否与我假设的值相同,这将显示获胜者,并确保使用括号对其进行排序,因此一个获胜条件看起来像

((taken[0] == taken[3]) && (taken[0] == taken[6]))

但是,这只会告诉您某个玩家赢了,而不是哪个玩家赢了。我想一旦确定某人获胜并宣布该玩家为获胜者,您可以检查一下哪个玩家最后一步。

于 2012-06-28T19:44:07.213 回答
1

在java中,

if (a && b) or if (a || b) 

仅当 a 和 b 是布尔/布尔表达式时才有效。

于 2012-06-28T19:44:47.340 回答
1

1)您不能在变量上使用&&||运算符,int因为它们是用于boolean值的。

2)也使用括号来分组条件,如

 if (
      (taken[0]==1 && taken[3]==1 && taken[6]==1)||
      (taken[0]==1 && taken[1]==1 && taken[2]==1)||
      ...
于 2012-06-28T19:52:22.800 回答
1

在这里,我有一个名为 take 的数组,其中包含 9 个整数,每个整数要么为 1,即玩家一拥有该块,要么为二,即玩家二拥有该块。

在这种情况下,您可以将逻辑运算符替换为位运算符:

int winner = taken[0] & taken[3] & taken[6]
           | taken[0] & taken[1] & taken[2]
           | taken[2] & taken[5] & taken[8]
           | taken[6] & taken[7] & taken[8]
           | taken[0] & taken[4] & taken[8]
           | taken[2] & taken[4] & taken[6]
           | taken[1] & taken[4] & taken[7]
           | taken[3] & taken[4] & taken[5];

然后变量winner将包含 1 如果玩家 1 赢了,如果玩家 2 赢了,则为 2,如果他们都没有赢,则为 0,或者他们都赢了 3(这在您的游戏中可能是不可能的)。

于 2012-06-28T20:03:44.823 回答
0

好的,这里有两个主要问题。

首先,taken[0]需要返回 true 或 false 才能在 if 语句中保持原样。您提到它是一个整数,因此要返回 true 或 false,您需要进行比较,例如taken[0] == 1.

其次,您需要使用括号并进行一些分组。Java 不尊重空格。而不是if( taken[0] && taken[3] && taken[6] || ...,你需要做if( (taken[0] && taken[3] && taken[6]) || ...。也就是说,您需要在每组分组周围加上括号。

Eclipse 出错的原因是该&&运算符仅用于比较布尔值。那就是true && true。你给它整数,它不喜欢那样。

您可能想要解决此问题的一种方法是编写一个函数来确定是否达到了解决方案。所以也许是这样的:

private boolean isSolutionPresent(int[] taken, int index1, int index2, int index3) {
    return (taken[index1] == 1 ) && (taken[index2] == 1) && (taken[index3] == 1);
}

然后你可以将你的 if 语句转换为:

if (isSolutionPresent(taken, 0, 3, 6) ||
    isSolutionPresent(taken, 0, 1, 2) ||
    isSolutionPresent(taken, 2, 5, 8) || //... etc, removing the final ==1

由于该isSolutionPresent方法返回一个布尔值(即真/假),您可以将||运算符应用于它。

于 2012-06-28T19:44:50.740 回答