Pessoal, desculpa o incomodo novamente, mas continuo com problemas…
O problema anterior era porque todas as casas dos arrays estavam vazias. No caso, declarei a variável tabuleiro, declarei que era 3x3 (dentro da classe tenho 3 vetores que podem ser preenchidos com o parametro de colunas).
Tentei colocar o preenchimento no construtor e não consegui, sendo assim criei uma função chamada preenchetabuleiro, que seria executada logo após a criação do mesmo, preenchendo o tabuleiro com “” em todos os espaços.
Não há nada sublinhado de vermelho, nem erros apontados no código, porém não está executando, acusando o erro Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3.
O código do construtor e da função a seguir, e logo após o main:
[code]public tabuleiro(int l, int c){
linha = l;
coluna = c;
linha0 = new Peca[c];
linha1 = new Peca[c];
linha2 = new Peca[c];
}
public void preenchetabuleiro(int c){
if (c == 3) {
do {
linha0[c-1].setTipo("");
linha1[c-1].setTipo("");
linha2[c-1].setTipo("");
c = c-1;
}while(c>=0);
}
}[/code]
[code]public static void main(String[] args) {
Peca p1 = new Peca("X");
Peca p2 = new Peca("O");
tabuleiro tab = new tabuleiro(3, 3);
tab.preenchetabuleiro(3);
tab.setPeca(1, 2, p2);
JOptionPane.showMessageDialog(null, tab.print());
}
A exceção que está dando é pq você está querendo acessar um index que não existe! Se o seu Array tem 3 posições então ele dever ir de 0 até 2! Modifique o código!
na verdade eu tinha reparado nessa parte que vc disse e consertei, e agora está dando null pointer exception…
Cara, to arrancando os cabelos e não consigo fazer ele preencher as arrays, tentei varias maneiras…
public class Peca {
private String tipo;
public Peca(String t){
tipo = t;
}
public String getTipo(){
return tipo;
}
public void setTipo(String tipo1){
tipo = tipo1;
}
}
public class tabuleiro {
private int linha;
private int coluna;
private Peca[] linha0;
private Peca[] linha1;
private Peca[] linha2;
public tabuleiro(int l, int c){
linha = l;
coluna = c;
linha0 = new Peca[c];
linha1 = new Peca[c];
linha2 = new Peca[c];
}
public void preenchetabuleiro(int c){
if (c == 3) {
do {
linha0[c-1].setTipo("");
linha1[c-1].setTipo("");
linha2[c-1].setTipo("");
c = c-1;
}while(c>=0);
}
}
public boolean setPeca(int l, int c, Peca p){
boolean retorno = false;
if(l == 1) {
linha0[c-1] = p;
retorno = true;
}
if(l == 2) {
linha1[c-1] = p;
retorno = true;
}
if(l == 3) {
linha2[c-1] = p;
retorno = true;
}
return retorno;
}
public Peca getPeca(int l, int c){
Peca peca = null;
if(l == 1) {
peca = linha0[c-1];
}
if(l == 2) {
peca = linha1[c-1];
}
if(l == 3) {
peca = linha2[c-1];
}
return peca;
}
public String getError(){
String errormessage = "";
errormessage.equals("Erro. O tabuleiro não deve ter mais de 9 espaços.");
return errormessage;
}
public String print() {
String temp = "";
int c = 1;
this.coluna = c;
for (c = 1; c <= 3; c++) {
if (linha0[c-1].getTipo().equals("")) {
temp = temp + c;
} else{
temp = temp + linha0[c-1];
}
if((c==1)||(c==2)) {
temp = temp + "|";
} else{
temp = temp + "\n";
}
}
return temp;
}
public static void main(String[] args) {
Peca p1 = new Peca("X");
Peca p2 = new Peca("O");
tabuleiro tab = new tabuleiro(3, 3);
tab.preenchetabuleiro(3);
tab.setPeca(1, 2, p2);
JOptionPane.showMessageDialog(null, tab.print());
}
Pelo que eu entendi olhando seu código, você está querendo preencher uma Matriz (Tabuleiro) 3x3 certo?! Como eu vi que o erro está no seu método preencheTabuleiro, eu fiz algumas alterações em um método de um projeto meu da Faculdade, e acho que dá pra você aproveitar no seu código, segue:
public class Tabuleiro {
private int linha;
private int coluna;
private Tabuleiro[][] tabuleiro;
public void preencheTabuleiro() {
int n = 3;
int i, j, tabuleiro[][] = new int[n][n];
//for para preenchimento da Matriz tabuleiro
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i == j)
tabuleiro[i][j] = 0;
else if ((i + j) == (n - 1))
tabuleiro[i][j] = 1;
else
tabuleiro[i][j] = (int) (Math.round(Math.random() * 1)); //método random para nº aleatórios 0 e 1
}
}
//for para impressão dos valores no console
for (i = 0; i < n; i++) {
System.out.printf("%da. linha: ", (i + 1));
for (j = 0; j < n; j++) {
System.out.printf("%d ", tabuleiro[i][j]);
}
System.out.printf("\n");
}
}
//getters e setters se hover necessidade
Classe de Teste para testar o método
public class Teste {
public static void main(String[] args) {
//instanciando a Classe Tabuleiro
Tabuleiro tabuleiro = new Tabuleiro();
//método que preenche o tabuleiro
tabuleiro.preencheTabuleiro();
}
}