Erro na array

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());
    
    
    
}

[/code]

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!

então, por isso eu fiz c-1

se c==3 então ele preenche o linha0[c-1]

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…

Essa exceção java.lang.ArrayIndexOutOfBoundsException: 3 diz que você está acessado o índice 3, que é inexistente!

tem como você colocar todo o seu código? Esse Construtor até agora eu não entendi!

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());
        
        
        
    }

Só olhei o código até encontrar esse erro aqui:

Linha 28 do último código postado:

}while(c>=0);

Deve ser:

c > 0

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(); 
	}

}

Console do método executado:

1a. linha: 0 0 1 
2a. linha: 0 0 1 
3a. linha: 1 0 0

Acho que com isso, dá pra você resolver alguma coisa!

pessoal muito obrigada, depois de muito quebrar a cabeça eu consegui resolver =] muito obrigada pela ajuda, foi fundamental!