Les index du tableau de caractères n'acceptent pas
-
24-12-2019 - |
Question
J'ai un problème avec un jeu simulé de Tic Tac Toe.J'utilise un tableau bidimensionnel pour représenter le plateau de jeu et je l'ai instancié comme suit.Il est nécessaire que j'utilise un tableau de type char.Je me rends compte que je ne devrais pas avoir à spécifier que chaque index est nul, car c'est la valeur par défaut pour char, mais j'ai pensé essayer.
public TicTacToe2D()
{
board = new char[3][3];
for(int i = 0; i < board.length; i++)
{
for(int j = 0; j < board[i].length; j++)
{
board[j] = null;
}
board[i] = null;
}
}
Ici, je vérifie une condition de victoire, en voyant si les index sont égaux les uns aux autres et non nuls (valeur par défaut), bien que j'aie essayé d'utiliser « » pour la valeur initiale de mon tableau.Dans ce cas, j'ai eu l'erreur :"personne imcompatible:char ne peut pas être converti en char[]"
public char isWin()
{
//Check for row wins
if (board[0][0] == board[0][1] && board[0][1] == board[0][2] && board[0][0] != null)
return true;
if (board[1][0]==board[1][1] && board[1][1]==board[1][2] && board[1][0] != null)
return true;
if (board[2][0]==board[2][1] && board[2][1]==board[2][2] && board[2][0] != null)
return true;
//Check for column wins
if (board[0][0]==board[1][0] && board[1][0]==board[2][0] && board[0][0] != null)
return true;
if (board[0][1]==board[1][1] && board[1][1]==board[2][1] && board[0][1] != null)
return true;
if (board[0][2]==board[1][2] && board[1][2]==board[2][2] && board[0][2] != null)
return true;
//Check for diagonal wins
if (board[0][0]==board[1][1] && board[1][1]==board[2][2] && board[0][0] != null)
return true;
if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[2][0] != 0)
return true;
else return false;
}
Lorsque je vérifie si un index est nul, j'obtiens l'erreur "types incomparables :char et » Toute aide serait grandement appréciée !
La solution
Le type de données char
est primitif, donc ça ne peut pas être null
.Mais la valeur par défaut est null personnage, \0
(ou \u0000
). JLS Section 4.12.5 donne des valeurs par défaut :
- Pour le type char, la valeur par défaut est le caractère nul, c'est-à-dire « \u0000 ».
Essayez de le comparer à \0
ou \u0000
au lieu de null
.
Autres conseils
un char n'est pas un objet, c'est un type primitif.
cela signifie qu'un caractère est comme un entier, un flottant ou un booléen, qui a une longueur fixe et sa valeur initiale est zéro (ou fausse).
Pour autant que je me souvienne, char est un 8 bits, mais je peux me tromper.Tout cela dit, un caractère que vous pouvez comparer à une lettre, par exemple : 'a'
ou avec un numéro réel, par exemple 0
ou 1
.
board
est déclaré comme char[][]
.Il s'agit donc d'un tableau de tableaux de caractères.Donc board[i]
est un tableau de caractères (une ligne de votre tableau).Et board[i][j]
est un char (la valeur d'une cellule de votre tableau).
La valeur par défaut de chaque cellule d'un tel tableau 2D est 0.Pas nul.Un type primitif ne peut pas être nul.