Não consigo passar uma matriz como referência para ser usado em outra classe. JAVA

2 respostas Resolvido
java
D

Olá! Estou fazendo um projeto em JAVA para faculdade de jogo da velha. Existe uma classe tabuleiro onde as jogadas serão feitas pelo jogador(classe) e pelo computador (classe), obviamente as jogadas terão que ser feitas no mesmo objeto do tipo tabuleiro.

O que acontece é que eu não consigo criar essa interação entre jogador e tabuleiro, pois não consigo passar a minha matriz que pertence a classe tabuleiro para a classe jogador, onde tem o método jogar. Esse método jogar precisa da matriz para que possa ocorrer a interação(manipular a matriz).

Em resumo é que eu não consigo referenciar uma matriz em outra classe.

Já tentei de várias formas, já pesquisei, assisti vídeos, mas nada trata desse problema em específico. Ps: A classe computador não foi implementada ainda, mas se eu conseguir resolver esse problema na classe jogador fazer o mesmo na classe computador é mais fácil.
O código está sem nenhuma tentativa de resolver esse problema para que fique mais fácil o entendimento.

package lab;

public class Tabuleiro {
protected String tabuleiro[][] = new String[3][3];

public Tabuleiro() {
	
	tabuleiro[0][0] = "A1";
	tabuleiro[0][1] = "A2";
	tabuleiro[0][2] = "A3";
	tabuleiro[1][0] = "B1";
	tabuleiro[1][1] = "B2";
	tabuleiro[1][2] = "B3";
	tabuleiro[2][0] = "C1";
	tabuleiro[2][1] = "C2";
	tabuleiro[2][2] = "C3";
}

public String[][] getTabuleiro() {
	return tabuleiro;
}

public void setTabuleiro(String[][] tabuleiro) {
	this.tabuleiro = tabuleiro;
}



public void Mostrar() {
	for (int i = 0; i < tabuleiro.length; i++) {
		for (int j = 0; j < tabuleiro[i].length; j++) {
			System.out.print(tabuleiro[i][j] + " ");
		}
		System.out.println();
	}
	System.out.println();
	
}

public void VisualizarJogo() {

	tabuleiro[0][0] = "A1";
	tabuleiro[0][1] = "A2";
	tabuleiro[0][2] = "A3";
	tabuleiro[1][0] = "B1";
	tabuleiro[1][1] = "B2";
	tabuleiro[1][2] = "B3";
	tabuleiro[2][0] = "C1";
	tabuleiro[2][1] = "C2";
	tabuleiro[2][2] = "C3";
	
	for (int i = 0; i < tabuleiro.length; i++) {
		for (int j = 0; j < tabuleiro[i].length; j++) {
			System.out.print(tabuleiro[i][j] + " ");
		}
		System.out.println();
	}
	System.out.println();
}

}

package lab;

import java.util.Scanner;

public class Jogador extends Tabuleiro {

public void Jogar(){
		
		Scanner scan = new Scanner(System.in);
		System.out.print("Escolha sua jogada: ");

		String jogada = scan.nextLine();
		

		switch (jogada ) {
		
		case "A1":
			if (tabuleiro[0][0].equals("O") || tabuleiro[0][0].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[0][0] = "O";

			}
			break;
		case "A2":
			if (tabuleiro[0][1].equals("O") || tabuleiro[0][1].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[0][1] = "O";
			}
			break;
		case "A3":
			if (tabuleiro[0][2].equals("O") || tabuleiro[0][2].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[0][2] = "O";
			}
			break;
		case "B1":
			if (tabuleiro[1][0].equals("O") || tabuleiro[1][0].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[1][0] = "O";
			}
			break;
		case "B2":
			if (tabuleiro[1][1].equals("O") || tabuleiro[1][1].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[1][1] = "O";
			}
			break;
		case "B3":
			if (tabuleiro[1][2].equals("O") || tabuleiro[1][2].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[1][2] = "O";
			}
			break;
		case "C1":
			if (tabuleiro[2][0].equals("O") || tabuleiro[2][0].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[2][0] = "O";
			}
			break;
		case "C2":
			if (tabuleiro[2][1].equals("O") || tabuleiro[2][1].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[2][1] = "O";
			}
			break;
		case "C3":
			if (tabuleiro[2][2].equals("O") || tabuleiro[2][2].equals("X")) {
				System.out.println("Esta jogada já foi efetuada.Faça outra jogada! JOGUE NOVAMENTE");
				System.out.println();
				Jogar();
			} else {
				tabuleiro[2][2] = "O";
			}
			break;

		default:
			System.out.println("ATENÇÃO: JOGUE APENAS CONFORME OS DADOS FORNECIDOS NA TABELA. JOGUE NOVAMENTE!  ");
			Jogar();
			break;

		}

	
}

}

2 Respostas

ThiagoWill
Solucao aceita

Olá!
Já testou se no lugar de estender a classe Tabuleiro você ter um atributo objeto dela?
Na lógica, Jogador não é um tabuleiro.
Você pode ter uma classe Jogador, uma Tabuleiro e uma classe Jogo por exemplo.
Cada uma teria sua responsabilidade e você poderia passar o objeto tabuleiro como argumento.Talvez ajude a resolver o problema e você estará aplicando uma boa prática de programação. Espero ter ajudado.

D

Obrigado pela resposta!
Realmente Jogador não é tabuleiro, fiz isso porque não conseguia justamente relacionar os dois.
Acho bacana a criação da classe jogo, pensei me fazer isso mesmo. O problema é que eu não consigo/não sei criar esse atributo na classe tabuleiro e depois usar ele como argumento, por exemplo no meu método jogar.
Eu queria justamente saber como passar um objeto tabuleiro para métodos fora da classe de tabuleiro.

É algo básico, acredito eu, mas fiquei tanto tempo sem interagir com JAVA que estou bem perdido agora.

Caso eu não tenha sido claro é só falar e obrigado pela resposta

Criado 20 de maio de 2020
Ultima resposta 20 de mai. de 2020
Respostas 2
Participantes 2