首页 > 解决方案 > '==' 符号未检测到变量上的字符

问题描述

我在这里花了几个小时试图解决这个问题,但没有成功。我正在做一个基于 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”正在测试的数组。感谢帮助我实现这一目标的答案。

标签: javaeclipseequalitytic-tac-toe

解决方案


问题的原因是您已声明该类Jogador具有Tabuleiro如下字段:

Tabuleiro tab = new Tabuleiro();

Jogador.verificaJogada就是测试。但这与您在方法中初始化的实例不同。 Tabuleiromain

显然verificaJogada需要测试Tabuleiro您在main.


那我该如何引用 main 的实例呢?

您将Tabuleiro创建的实例main作为参数传递:

  • 构造函数的参数Jogador(然后您可以将其分配给Jogador.tab字段)
  • verificaJogada方法的参数。

我以为我必须在每个班级上为每个班级创建一个实例才能使其正常工作..

我不知道你从哪里得到这个想法。每次您编写new Tabuleiro()时,您都在创建一个Tabuleiro与所有先前创建的实例不同的新实例。

Javanew运算符总是创建一个新实例1。它永远不会返回之前创建的实例。


1 - ... 或抛出异常。


推荐阅读