Как я могу сослаться на мой двумерный логический массив в целом?
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 неверное значение.