StackOverflow no jogo campo minado [RESOLVIDO]

7 respostas
P

Estou desenvolvendo um jogo de campo minado para a aula e fico recebendo esse erro “StackOverflowError”. Eu já sei o que é, mas não consigo resolver.
Estava tudo ok até o momento em que eu implementei o método em que quando se clica em um campo onde não tem mina nos arredores, a área se expande.

este é o código do método:

public void expande(int x, int y){
    
    b[x][y].setEnabled(false);
    
    if(this.getMinas(x, y) == 0){
        b[x][y].setText("");
        
        try{
            this.expande(x, y+1);
        }catch(ArrayIndexOutOfBoundsException e){}
        try{
            this.expande(x, y-1);
        }catch(ArrayIndexOutOfBoundsException e){}
        try{
            this.expande(x, y+1);
        }catch(ArrayIndexOutOfBoundsException e){}
        try{
            this.expande(x, y+1);
        }catch(ArrayIndexOutOfBoundsException e){}
        

    }else{
        b[x][y].setText("" + this.getMinas(x, y));
    }
    
}

7 Respostas

pmlm

Só podes expandir para uma casa que esteja enabled…

lucasportela

exiba os stackTraces, por favor. Todo mundo sabe o que significa, mas se não exibir fica mais difícil de descobrir o que pode ter ocorrido.

e.printStackTrace();

mas olhando assim rapidamente, você precisa garantir que x e y existam

P

lucasportela

mas eu garanto que x e y existam, se eles não existirem da ArrayIndexOutOfBoundsException

e desculpa minha ignorância, onde eu devo colocar o e.printStackTrace()?

pmlm

no programa eu tenho uma matriz com a posição das minas, e uma matriz de botões que quando eu clico o programa verifica quantas minas tem em volta seta o enabled do botão para false e troca o text do botão para o numero de minas ao redor

pmlm

Repito: Só podes expandir para uma casa que esteja enabled…

Imagina que na posição 00 e na posição 01 não tens minas.
Se carregares na posição 00 vai expandir para a 01, que por sua vez vai expandir outra vez para a 00, que vai expandir para a 01, … e dá StackOVerflowException

No inicio do teu método expande, tens de verificar se a casa está enable, e se não estiver não fazes mais nada.

P

pmlm

cara, agora eu entendi, muito bom meu, com certeza é isso que tu falou!

vou arrumar o código ali e logo posto o resultado!

muito obrigado!

lucasportela

petros:
lucasportela

mas eu garanto que x e y existam, se eles não existirem da ArrayIndexOutOfBoundsException

e desculpa minha ignorância, onde eu devo colocar o e.printStackTrace()?

pmlm

no programa eu tenho uma matriz com a posição das minas, e uma matriz de botões que quando eu clico o programa verifica quantas minas tem em volta seta o enabled do botão para false e troca o text do botão para o numero de minas ao redor

Ele fica no bloco do catch(Exception e).

try{  
    this.expande(x, y+1);  
}catch(ArrayIndexOutOfBoundsException e){
    e.printStackTrace();
}
P

é que eu coloquei ali e a IDE sublinhou o código. mas dexa ja consegui resolver aqui!

Criado 19 de setembro de 2011
Ultima resposta 19 de set. de 2011
Respostas 7
Participantes 3