Java ';未检测到变量上的字符==';符号
我在这里花了几个小时试图解决这个问题,但没有成功。 我正在做一个基于2D数组的Tic-Tac-Toe游戏,我使用了两个“for”将“-”符号添加到数组的每个位置。 现在我正在尝试一种验证方法,以防止玩家将其“X”放在被占用或无效的位置。 当我打印电路板/阵列时,每个位置上都有“-”,但当我尝试执行“如果该位置有“-”这是一个有效的移动”时,代码会不断返回那里没有“-”,即使它有。 “jog”和“tab”是因为我使用的是不同的类。 我的调试也没有显示从第一个println开始的任何变量,我不知道为什么Java ';未检测到变量上的字符==';符号,java,eclipse,equality,tic-tac-toe,Java,Eclipse,Equality,Tic Tac Toe,我在这里花了几个小时试图解决这个问题,但没有成功。 我正在做一个基于2D数组的Tic-Tac-Toe游戏,我使用了两个“for”将“-”符号添加到数组的每个位置。 现在我正在尝试一种验证方法,以防止玩家将其“X”放在被占用或无效的位置。 当我打印电路板/阵列时,每个位置上都有“-”,但当我尝试执行“如果该位置有“-”这是一个有效的移动”时,代码会不断返回那里没有“-”,即使它有。 “jog”和“tab”是因为我使用的是不同的类。 我的调试也没有显示从第一个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
}
publicstaticvoidmain(字符串[]args){
Tabuleiro tab=新Tabuleiro();
Jogador jog=新Jogador();
computator comp=新的computator();
tab.inicializarTabuleiro();
tab.mostraTabuleiro();
System.out.println(“Bem vindo ao Jogo da Velha!”);
System.out.println(“1号和3号文件的修订版”);
扫描器定义=新扫描器(System.in);
if(deficuldade.nextInt()==1){
对于(int i=1;i=0&&jogada而言,问题的原因是您已将类Jogador
声明为具有如下Tabuleiro
字段:
Tabuleiro tab = new Tabuleiro();
这就是Jogador.verificaJogada
正在测试的内容。但这是一个不同于您在main
方法中初始化的Tabuleiro
实例
显然,verificaJogada
需要测试您在main
中创建和初始化的Tabuleiro
那么我如何引用main的实例呢 将在
main
中创建的Tabuleiro
实例作为参数传递:
- 为
的构造函数指定一个参数(然后可以将该参数指定给Jogador
字段)Jogador.tab
- 或
方法的参数verificaJogada
new Tabuleiro()
,你都在创建一个新的Tabuleiro
实例,它不同于以前创建的所有实例
Javanew
操作符总是创建一个新实例1。它从不返回先前创建的实例
1-…或引发异常。您的
Tabuleiro
类定义是什么,特别是mat
字段和inicializarTabuleiro()
method?请提供一个我们可以自己运行和调试的方法。目前,我们无法告诉您问题是什么…除了您没有向我们展示的代码中最有可能存在的问题。具体来说,2D数组应该包含什么数据类型?如果它应该包含字符串,并且您使用==与字符进行比较,那么ng可能有很多问题。(如果它是一个字符串数组,与char
相比将是一个编译错误…)什么是converteJogada(jogada)
do?你不能改变这个原语int
变量的任何内容,我在任何地方都看不到行或col
变量。你需要发布更多的代码。请再帮我一次,好吗?那么我如何引用main的实例呢?我想我必须在每个类上为每个类创建一个实例这件事很难奏效。。
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 tab = new Tabuleiro();