java - '==' 符号未检测到变量上的字符
问题描述
我在这里花了几个小时试图解决这个问题,但没有成功。我正在做一个基于 2D 数组的井字游戏,并且我使用了几个“for”将“-”符号添加到数组的每个位置。现在我正在尝试一种验证方法来防止玩家将他的“X”放在占用或无效的位置。当我打印板/阵列时,每个位置都有'-',但是当我尝试做一个“如果位置有'-'它是一个有效的运动”时,代码不断返回那里没有'-',即使它有。“慢跑”和“标签”是因为我使用不同的课程。此外,我的调试从第一个 println 开始也没有显示任何变量,我不知道为什么。
public static void main(String[] args) {
Tabuleiro tab = new Tabuleiro();
Jogador jog = new Jogador();
Computador comp = new Computador();
tab.inicializarTabuleiro();
tab.mostraTabuleiro();
System.out.println("Bem vindo ao Jogo da Velha!");
System.out.println("Escolha a dificuldade desejada de 1 a 3");
Scanner dificuldade = new Scanner(System.in);
if (dificuldade.nextInt() == 1){
for (int i = 1; i <= 9; i++){
Scanner scan = new Scanner(System.in);
System.out.println("Escolha uma posição(1-9)");
int jogada = scan.nextInt();
jog.converteJogada(jogada); //this code converts int from keyboard to a position on array
jog.verificaJogada(jogada); //this code is the problem
System.out.println(jog.row); //used this to check if position is correct, it is
System.out.println(jog.col);//same from above
System.out.println(tab.mat[jog.row][jog.col]); //used to print the position to see if '-' it was there, it was
System.out.println(jog.valid); //to see if '-' is being confirmed or not
}
public class Tabuleiro {
public Tabuleiro(){
}
public char mat[][] = new char[3][3];
public void inicializarTabuleiro(){
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
mat[i][j] = '-';
}
}
}
public void mostraTabuleiro(){
System.out.println("-------------");
for (int i = 0; i < 3; i++){
System.out.print("| ");
for (int j = 0;j < 3; j++){
System.out.print(mat[i][j] + " | ");
}
System.out.println();
System.out.println("-------------");
}
}
}
public class Jogador{
public Jogador(){
}
public Jogador(int linha, int coluna, boolean valid) {
this.linha = linha;
this.coluna = coluna;
this.valid = valid;
}
Tabuleiro tab = new Tabuleiro();
Jogo jog = new Jogo();
public int linha;
public int coluna;
public boolean valid;
public char nulo;
public void converteJogada(int jogada){
switch(jogada){
case 1:
row = 0;
col = 0;
break;
case 2:
row = 0;
col = 1;
break;
case 3:
row = 0;
col = 2;
break;
case 4:
row = 1;
col = 0;
break;
case 5:
row = 1;
col = 1;
break;
case 6:
row = 1;
col = 2;
break;
case 7:
row = 2;
col = 0;
break;
case 8:
row = 2;
col = 1;
break;
case 9:
row = 2;
col = 2;
break;
default:
break;}
}
public void verificaJogada(int jogada){
if ((jogada >= 0 && jogada <= 9) && (tab.mat[row][col] == '-')){
valid = true;
}
else {
valid = false;
}
}
问题解决了由于课程不佳,我在每节课上都实例化其他课程的做法很糟糕。这使我的代码有很多数组,而不仅仅是我的代码引用的一个。所以我的主数组(例如 Tabuleiro)是用“-”初始化的,但是 Jogador 类上有一个 Tabuleiro 类的实例,这个实例的数组没有被初始化,这就是我的“verificaJogada”正在测试的数组。感谢帮助我实现这一目标的答案。
解决方案
问题的原因是您已声明该类Jogador
具有Tabuleiro
如下字段:
Tabuleiro tab = new Tabuleiro();
这Jogador.verificaJogada
就是测试。但这与您在方法中初始化的实例不同。 Tabuleiro
main
显然verificaJogada
需要测试Tabuleiro
您在main
.
那我该如何引用 main 的实例呢?
您将Tabuleiro
创建的实例main
作为参数传递:
- 构造函数的参数
Jogador
(然后您可以将其分配给Jogador.tab
字段) - 或
verificaJogada
方法的参数。
我以为我必须在每个班级上为每个班级创建一个实例才能使其正常工作..
我不知道你从哪里得到这个想法。每次您编写new Tabuleiro()
时,您都在创建一个Tabuleiro
与所有先前创建的实例不同的新实例。
Javanew
运算符总是创建一个新实例1。它永远不会返回之前创建的实例。
1 - ... 或抛出异常。
推荐阅读
- android - Flutter 应用程序在使用 Google Pay 处理付款后崩溃
- python - discord.py 机器人的 SQL 表中的变量更新
- swift - 如何使用 swiftUI MacOS 切换视图?
- java - 如果 WHERE 得到空结果,则抛出 UPDATE 查询异常
- c# - Xamarin Forms 网页调用从不返回结果
- android - EmptyDatabaseAlert 显示两次
- firebase - Firestore - 可以通过数组不包含查询吗?
- php - 如何从不同的域访问 SQL 数据库
- ios - iOS Swift 更新到 UI 延迟
- node.js - 适用于 windows 和 linux 的 Nodejs node-gyp 构建