为什么我会得到'运营商&&未定义参数类型char,char'错误

时间:2016-10-30 09:00:35

标签: java arrays char boolean

    if ((board[x][x] && board[x + 1][x + 1] && board[x + 2][x + 2]) == 'Y') {
            playerWins = true;
            }

为什么我不能使用&&和||这里吗?

4 个答案:

答案 0 :(得分:2)

你想要这个:

if (board[x][x] == 'Y' && board[x + 1][x + 1] == 'Y' && board[x + 2][x + 2] == 'Y') {
    playerWins = true;
}

&&只能用于将布尔表达式连接在一起。

您的代码假定某种分发规则,例如(x && y) == z等同于(x == z) && (y == z)。在英语中,你可以用这种方式说明事情"如果x和y都是z,"但编程语言(和形式逻辑)没有这样的定义。

答案 1 :(得分:1)

Java逻辑运算符仅对布尔值执行操作。所以任何逻辑运算符的两个操作数都需要是布尔值。在你的代码中,board [x] [y]的类型为char,因此抛出异常。你需要将它与某些东西进行比较或者拥有一些布尔值的东西。 对于电路板[x + 1] [x + 1]也是如此。 (从手机输入)

答案 2 :(得分:0)

与其他语言(如C,C ++)相比,Java的条件评估是不同的。

  

虽然循环条件(if,while和退出条件in)中   Java和C ++都期望一个布尔表达式,代码如if(a = 5)   将导致Java中的编译错误,因为没有隐式   缩小从int到boolean的转换。

请参阅以下链接了解详情: https://en.wikipedia.org/wiki/Comparison_of_Java_and_C%2B%2B

答案 3 :(得分:0)

您不能将这些表达式连接起来用'&&'进行评估。或者' ||',因为它们不会被评估为布尔值,但在这种情况下是chars。

但是,你可以这样做:

if (board[x][x] == 'Y' && board[x + 1][x + 1] == 'Y' && board[x + 2][x + 2] == 'Y') {
     playerWins = true;
}

甚至这样:

/*so this methods check if the board has a different value than 'Y', so it returns false immediately without going over the other positions, otherwise if the value was equal to Y at all positions the if statement wont be accessed,  
you will exit the for-loop & return true;  You're main method must store the boolean value returned not more */

public static boolean winGame(PARAMS p) {  //you can give it the 2d array as a parameter for example..
   for(int x = 0; x < value; x++) {   // you specify the value according to your board
       if(board[x][x] != 'Y') {
             return false;
   }
      return true;
}