por favor editer seu codigo e coloque entre as tags ‘code’
e explique melhor oq a função passo deve fazer, vc quer q ela encontre uma saida do labirinto?
t+
F
felp10
quikkoo:
por favor editer seu codigo e coloque entre as tags ‘code’
e explique melhor oq a função passo deve fazer, vc quer q ela encontre uma saida do labirinto?
t+
isso uma saída do labirinto
F
felp10
wellington.nogueira:
felp10:
Bom dia a todos, olha nóis aki de novo.
Bem eu tenho que fazer um labirinto simples só para aparecer no console mesmo.
Só que me embananei todo no meu código gostaria de um help dêem uma olhada.
Bem estou com dúvida nesse segundo método nao estou conseguindo fazer passar de casa. Alguém pode me dar uma luz?
Vlw galera!
Eu não entendi o método geraLabirinto…
você criou um array bidimensional de inteiros int[][] labirinto
E associou a cada casa o char zero (‘0’)
No método passo, você compara labirinto[indice1][indice2] com o inteiro zero (0).
‘0’ é diferente de 0 (‘0’ != 0). Apesar de int aceitar atribuição de char.
Pode ser isso…
Sem o resto do código fica difícil saber…
Hum é mesmo corrigindo, na verdade o método labirinto eu gostaria que criasse o labirinto com zeros e uns se 0 vai encontrando a saída.
F
felp10
Tá vamos por partes o método geraLabirinto do jeito que está o que falta para gerar o Labirinto com 0 e 1 sendo 0 o caminho que ele vai seguir e 1 desvia. A matriz será dada entrada por JOptionPane
F
felp10
Pessoal me ajuda por favor comecei a main assim:
ackagebr.com.labirinto;publicclassPrincipal{/** * @param args */publicstaticvoidmain(String[]args){// TODO Auto-generated method stubLabirintolab=newLabirinto();lab.geraLabirinto(4);}}// o codigo da classe Labirinto novamentepackagebr.com.labirinto;importjava.lang.*;publicclassLabirinto{intlabirinto[][];Stringcaminho[];intposicao;publicvoidgeraLabirinto(inttamanho){caminho=newString[(int)Math.pow(2,tamanho)];labirinto=newint[tamanho][tamanho];for(inti=0;i<tamanho;i++){for(intj=0;j<tamanho;j++){labirinto[i][j]=0;}}}publicvoidpasso(intlado,intcasa){if(labirinto[lado][casa+1]==0&&caminho[posicao-1].equals(""+lado+","+(casa+1))){caminho[posicao]=" "+lado+","+(casa+1);posicao++;passo(lado,casa+1);}if(labirinto[lado+1][casa]==0&&caminho[posicao-1].equals(""+lado+","+(casa+1))){passo(lado+1,casa);}if(labirinto[lado-1][casa]==0&&caminho[posicao-1].equals(""+lado+","+(casa+1))){passo(lado-1,casa);}}publicvoidimprimeCaminho(){}}
Fico no aguardo de uma orientação para que eu possa continuar, não quero o exercício não somente uma explicação para continuar.
Acho que com o enuciado fica melhor. Estou no caminho certo ou não?
Obrigado!
F
felp10
opa blz sem querer abusar mas ja abusando eu estou usando o eclipse e o que esta ocorrendo e que so esta imprimindo no console assim:
0
0
0
0
o correto era para estar imprimindo em matriz o que esta errado?aaa to perdidaco rsrs
F
felp10
Dei uma implementada porem na linha 21 esta dando erro porque?
packagebr.com.labirinto;importjava.lang.*;importjava.util.Random;publicclassLabirinto{intlabirinto[][];Stringcaminho[];Randomrd=newRandom();intposicao;publicvoidgeraLabirinto(inttamanho){caminho=newString[(int)Math.pow(2,tamanho)];labirinto=newint[tamanho][tamanho];for(inti=0;i<tamanho;i++){for(intj=0;j<tamanho;j++){labirinto[i][j]=nextInt(2);System.out.println(labirinto[i][j]);}}}publicvoidpasso(intlado,intcasa){if(labirinto[lado][casa+1]==0&&caminho[posicao-1].equals(""+lado+","+(casa+1))){caminho[posicao]=" "+lado+","+(casa+1);posicao++;passo(lado,casa+1);}if(labirinto[lado+1][casa]==0&&caminho[posicao-1].equals(""+lado+","+(casa+1))){passo(lado+1,casa);}if(labirinto[lado-1][casa]==0&&caminho[posicao-1].equals(""+lado+","+(casa+1))){passo(lado-1,casa);}}publicvoidimprimeCaminho(){}}//principalpackagebr.com.labirinto;importjavax.swing.JOptionPane;publicclassPrincipal{/** * @param args */publicstaticvoidmain(String[]args){// TODO Auto-generated method stubLabirintolab=newLabirinto();lab.geraLabirinto(Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o tamanho do labirinto")));}}
vlws
F
felp10
Galerinha do bem dando continuidade fiz algumas coisinhas mas ainda falta muito se puder me ajudar alguem, por favor:
//principalpackagebr.com.labirinto;importjavax.swing.JOptionPane;publicclassPrincipal{/** * @param args */publicstaticvoidmain(String[]args){// TODO Auto-generated method stubLabirintolab=newLabirinto();lab.geraLabirinto(Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o tamanho do labirinto")));}}packagebr.com.labirinto;importjava.lang.*;importjava.util.Random;publicclassLabirinto{intlabirinto[][];Stringcaminho[];Randomrd=newRandom();intposicao;publicvoidgeraLabirinto(inttamanho){caminho=newString[(int)Math.pow(2,tamanho)];labirinto=newint[tamanho][tamanho];for(inti=0;i<tamanho;i++){for(intj=0;j<tamanho;j++){labirinto[i][j]=rd.nextInt(2);System.out.println(labirinto[i][j]);passo(i,j);}}}publicvoidpasso(intlado,intcasa){if(labirinto[lado][casa+1]==0&&caminho[posicao-1].equals(""+lado+","+(casa+1))){caminho[posicao]=" "+lado+","+(casa+1);posicao++;passo(lado,casa+1);imprimeCaminho();}if(labirinto[lado+1][casa]==0&&caminho[posicao-1].equals(""+lado+","+(casa+1))){passo(lado+1,casa);imprimeCaminho();}if(labirinto[lado-1][casa]==0&&caminho[posicao-1].equals(""+lado+","+(casa+1))){passo(lado-1,casa);imprimeCaminho();}}publicvoidimprimeCaminho(){System.out.println("_");}}/*Exception:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at br.com.labirinto.Labirinto.passo(Labirinto.java:30) at br.com.labirinto.Labirinto.geraLabirinto(Labirinto.java:24) at br.com.labirinto.Principal.main(Principal.java:14)*/
Ajuda por favor
pmlm
O teu problema é quando chegas às bordas do tabuleiro… Não podes verificar o valor de uma casa se ela não existe!
Assim, antes de acederes a posições [qqcoisa + 1] tens de verificar se qqcoisa não é já o limite do tabuleiro. Da mesma forma que [var-1] só pode ser feito se var for diferente de 0 senão vai cair fora do tabuleiro.
Deu para perceber?
F
felp10
pmlm:
O teu problema é quando chegas às bordas do tabuleiro… Não podes verificar o valor de uma casa se ela não existe!
Assim, antes de acederes a posições [qqcoisa + 1] tens de verificar se qqcoisa não é já o limite do tabuleiro. Da mesma forma que [var-1] só pode ser feito se var for diferente de 0 senão vai cair fora do tabuleiro.
Deu para perceber?
Hum não entendi, isso é devido a exception que está dando é isso? cara to perdido mesmo preciso me redirecionar no programa bem o método geraLabirinto entao esta com problema o que está faltando ou o que eu preciso corrigir depois vou ver se realmente é necessário criar uma outra array para guardar as casas que já passei como me indicou o amigo wellington
pmlm
No método passo, antes de cada if tens de validar que não vais cair fora do tabuleiro (ArrayIndexOutOfBoundsException)
Onde tens: if(labirinto[lado][casa+1] == 0 ...
tens de ter if( casa != labirinto[0].length-1 && labirinto[lado][casa+1] == 0 ...
Nota que isto é só para não dar a Exception. Não me debrucei sobre o algoritmo e não sei se vai achar o caminho correctamente.
F
felp10
Então a idéia é fazer um novo método boolean por exemplo para verificar isso ?
WellingtonRamos
felp10:
Bom dia a todos, olha nóis aki de novo.
Bem eu tenho que fazer um labirinto simples só para aparecer no console mesmo.
Só que me embananei todo no meu código gostaria de um help dêem uma olhada.
Bem estou com dúvida nesse segundo método nao estou conseguindo fazer passar de casa. Alguém pode me dar uma luz?
Vlw galera!
Eu não entendi o método geraLabirinto…
você criou um array bidimensional de inteiros int[][] labirinto
E associou a cada casa o char zero (‘0’)
No método passo, você compara labirinto[indice1][indice2] com o inteiro zero (0).
‘0’ é diferente de 0 (‘0’ != 0). Apesar de int aceitar atribuição de char.
Pode ser isso…
Sem o resto do código fica difícil saber…
WellingtonRamos
Mudou alguma coisa?
WellingtonRamos
Precisa-se, para ajudá-lo, saber o que quer fazer realmente…
Pra mim, após criar o labirinto seria chamar o passo passando por onde inicia (se é um labirinto, talvez fosse necessário informar a chegada.
E, por fim, imprimir o ccaminho.
Para o array caminho, mudaria o tipo dela para uma nova classe chamada Point com x e y como atributos (pode ser do contrutor mesmo) e um toString (sobrescrito) no formato que precisa ao invés de ser do tipo String.
Está dificil ajudar sem fornecer mais detalhes…
WellingtonRamos
Hmm…
Tem que alterar (não sei se prentende fazer isso depois) o método que gera labirinto para que possua um de dois possíveis valores.
Eu criaria um array extra de mesmo tamanho onde ficariam marcadas as “casas” pela qual já passei.
É mais simples comparar no método recursivo.
Aliás, é importante prever uma forma de parar a recursividade.
Não testei o método mas parece que ele vai dar um StackOverflowError ou um ArrayOutOfBoundsExcecption. Vc não confirma se é a última casa ou não, só vai incrementando o valor.
Sua verificação com o caminho indica apenas o de onde veio, não caminhos percorridos e inválidos. É bom observar melhor isso.
Obs.: O problema da forma descrita pode criar um labirinto sem saída, mas blz.