Как я могу сослаться на мой двумерный логический массив в целом?

2d boolean является статической переменной, если это что-то значит. Я думал, что могу сослаться только на имя массива, но получаю ошибку за это.

public class Game {

static boolean[][] board = new boolean[3][3];
}

public class Computer
{
  if (Game.board = true)
    {
        //code
    }
}

7 ответов

Решение

if(Game.board = true) выдаст ошибку компилятора, потому что board является двумерным массивом и, следовательно, не может быть назначен один boolean значение.

Кроме того, при сравнении убедитесь, что вы используете оператор сравнения ==

Возможно, вы хотите сделать что-то вроде:

if(Game.board[i][j] == true) где i а также j индексируют массив:

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        if(board[i][j] == true)
        {
          // Code
        }
    }
}

У тебя есть board объявлен как staticкакая-то конкретная причина?

поскольку board[i][j] возвращает boolean значение, на самом деле нет необходимости в == true:

if(board[i][j])

Возможно, вы ищете что-то подобное?

import java.util.Arrays;

class Test
{
    public static void main(String[] args)
    {
        boolean[][] board = {{}, {}, {}};
        // all values in board are set to false by default

        boolean[][] board2 = new boolean[0][3];
        boolean[][] board3 = {{true},{true},{true, false, false}};
        boolean[][] board4 = {{}, {true}, {true, true}, {}};

        printInfo(board, 1);
        printInfo(board2, 2);
        printInfo(board3, 3);
        printInfo(board4, 4);


    }

    public static boolean check(boolean[][] board)
    {
        if(board.length == 0) return false;

        int colLength = 0;
        int elementsInBoard = 0;    

        for (int i = 0; i < board.length; i++)
        {
            colLength = board[i].length;
            elementsInBoard += colLength;
            for(int j = 0; j < colLength; j++)
            {
                if (board[i][j] == false)
                {
                    return false;
                }
            }
        }

        if (elementsInBoard == 0)
        {
            return false;
        }else
        {
            return true;
        }
    }

    public static void printInfo(boolean[][] board, int id)
    {
        System.out.println("Board : " + id);
        System.out.println(Arrays.deepToString(board)); 
        System.out.println(check(board));       
    }
}

Выход:

Board : 1
[[], [], []]
false
Board : 2
[]
false
Board : 3
[[true], [true], [true, false, false]]
false
Board : 4
[[], [true], [true, true], []]
true

Конечно, Game.board как вы относитесь к boolean[][] двумерный массив. Но что заставляет вас думать, что вы можете сравнить массив 3х3 booleanс true напрямую?

for (int i = 0; i < 3; i++)
   for (int j = 0; j < 3; j++)
      if(board[i][j] == true){

         //Code

      }

А) Код, подобный этому, является ошибкой:

if (someBoolean = true)

Вы просто установили логическую переменную, а не тестировали ее. Ты хочешь:

if (someBoolean == true)

или еще лучше:

if (someBoolean)


Б) А boolean[][] (массив массив логического) не является логическим. Попробуй это:

if (Game.board[x][y])

Пара проблем с вашим кодом. Во-первых, вы не можете напрямую сравнить boolean[][] с true, Вам нужно будет использовать цикл. Во-вторых, вы должны разместить операторы кода внутри метода. Вы не можете использовать такие вещи, как операторы if без метода. Вот пример того, что вы хотите:

public class Game {
    private boolean[] board = new boolean[3][3];

    public static void main(String[] args) {
        boolean allTrue = true;
        for (int i = 0; i < board.length; i++) {
            boolean[] row = board[i];
            for (int j = 0; j < row.length; j++) {
                allTrue &= row[j];
            }
        }
        System.out.println(allTrue);
    }
}

Это игнорирует некоторую логику короткого замыкания, которую вы могли бы сделать, но, надеюсь, вы поняли суть.

Одна последняя вещь, один = это назначение, а не сравнение. использование == для сравнения, таких как myInt == 1,

Вы объявили свою переменную board как двумерный массив логического типа, и вы также инициализируете его. static boolean[][] board = new boolean[3][3];

Теперь здесь, Game.board = true, вы пытаетесь присвоить вашей переменной логического массива 2D неверное значение.

Другие вопросы по тегам