O que está errado no método abaixo?

7 respostas
D
public boolean guardaBloco() {

for (int i = ISala.X_INICIO_ARM; i <= ISala.X_FIM_ARM; i++) {

for (int j = ISala.Y_INICIO_ARM; i <= ISala.Y_FIM_ARM; j++) {

if (Sala.sala[i][j] == ISala.POSICAO_VAZIA) {

Sala.sala[i][j] = ISala.BLOCO_PRESENTE;

return true;

break;

}

return false;

}

}

}

Obrigada!

7 Respostas

edwlipe

primeiro, use identação para facilitar a leitura.

O erro mais provável é que você tem um break após um return.
Sendo assim, ele nunca será executado.

basta remover o break e tudo fico ok.

edwlipe

oops, achei outro erro…

for (int i = ISala.X_INICIO_ARM; i <= ISala.X_FIM_ARM; i++) { for (int j = ISala.Y_INICIO_ARM; i <= ISala.Y_FIM_ARM; j++) { //... } }

você tá iterando usando a variável “i” no jugar da “j”.

Eric_Yuzo

Para facilitar a leitura utilize a tag ‘code’ ‘/code’: http://www.guj.com.br/posts/list/50115.java

Complementando as dicas do edwlipe, este laço não vai chegar a repetir porque o return é executado tanto se a avaliação do seu if der verdadeiro ou falso.

public boolean guardaBloco() { for (int i = ISala.X_INICIO_ARM; i <= ISala.X_FIM_ARM; i++) { for (int j = ISala.Y_INICIO_ARM; i <= ISala.Y_FIM_ARM; j++) { if (Sala.sala[i][j] == ISala.POSICAO_VAZIA) { //Se a condição for verdadeira Sala.sala[i][j] = ISala.BLOCO_PRESENTE; return true; //retorna true encerrando o método break; //este break nunca será executado } //Se a condição não for verdadeira return false; //retorna false encerrando o método } //A execução não chegará até este ponto para que o laço possa repetir } }

ViniGodoy

E quando for postar tópicos, por favor, siga essas dicas:
http://www.guj.com.br/posts/list/50115.java

D

Bom dia!
Concordo que o break não irá executar, mas eu preciso de um código que faça o seguinte: percorrer todo o arranjo e se encontrar alguma espaço vazio faça tal coisa e pare, return true, senão achar nada return false.
Ou seja se achar 1 espaço vazio ele não procura outro e para.
Fiz desse jeito, abaixo, mas tb não estou nada satisfeita queria algo mais simples, podem me ajudar?
Obrigada!

public boolean guardaBloco() { int var = 0; desvio: for (int i = ISala.X_INICIO_ARM; i <= ISala.X_FIM_ARM; i++) { for (int j = ISala.Y_INICIO_ARM; j <= ISala.Y_FIM_ARM; j++) { if (Sala.sala[i][j] == ISala.POSICAO_VAZIA) { Sala.sala[i][j] = ISala.BLOCO_PRESENTE; Mensageiro.mensagem(Mensageiro.ARMAZENAGEM, i, j); var++; return true; } if (var == 1) { break desvio; } } } return false; }

ViniGodoy

O return já vai sair da função, o break não é necessário.

Outra coisa. Use boolean quando quiser uma variável sim/não, e não um int:

public boolean guardaBloco() { for (int i = ISala.X_INICIO_ARM; i <= ISala.X_FIM_ARM; i++) { for (int j = ISala.Y_INICIO_ARM; j <= ISala.Y_FIM_ARM; j++) { if (Sala.sala[i][j] == ISala.POSICAO_VAZIA) { Sala.sala[i][j] = ISala.BLOCO_PRESENTE; Mensageiro.mensagem(Mensageiro.ARMAZENAGEM, i, j); return true; } } } return false; }

D

Muito obrigada! Entendi!
Valeu mesmo.

Criado 11 de outubro de 2010
Ultima resposta 13 de out. de 2010
Respostas 7
Participantes 4