[ArrayList] jogo da forca, depois do remove da erro

4 respostas
BrenoSalgado

como desafio pessoal inventei de fazer jogo da forca

tinha feito ele com arrays, depois lendo meu livro vi sobre arraylist e resolvi 'implementar'

tenho:

uma classe p1 que  a palavra a ser adivinhada(scanner)
dois arraylists, um com o 'mostrador', que fica como "_ " para cada char da palavra
o outro arrayList 'arrayPalavra' em que é add todos os chars da palavra

       uma classe p2 que armazena o chute, possui a variavel de 'vidas' do player e um método seAcertou

       a classe main:

enquanto o numero de vidas for maior que zero
          recebe o chute pelo scanner, por um FOR checa se  o char na palavra
          se tiver, muda o 'mostrador' de "_" para o char, [b]remove a letra do arrayPalavra[/b]

          mostra o mostrador(ex: A _ _ A _ B _ I)
          checa se o player acertou o chute, se não, checa se o arrayPalavra  vazio, se tiver, BREAK
e o resto é codigo simples pra falar se o player ganhou ou perdeu...

mas quando eu rodo, ele começa funcionando direito, digito a palavra, porém quase sempre acaba dando erro pelo remove

O erro:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 1
	at java.util.ArrayList.RangeCheck(Unknown Source)
	at java.util.ArrayList.remove(Unknown Source)
	at br.com.forca.DemoForca.main(DemoForca.java:25)

se eu escolho a palavra "ASA", assim que digito "A" ela dá o erro
se eu escolho a palavra "ABC", ele recebe o A e o B normalmente, e no C ele dá este erro

como sou iniciante não tenho muita idéia do que pode ser isso ou o que significa o erro, alguém pode me ajudar?

4 Respostas

abelgomes

é porque quando vc remove uma letra, por exemplo, “A”, vc esta removendo onde tem “A” entao ele da aquele erro poruqe o tamanho do seu array é menor do que aquele tamanho pelo qual vc quer navegar, ou seja, vc removeu 2x o “A” mas para o seu for é como se so tivesse removido 1 entao vc tem uma posição a menos.

Uma solução seria vc remover pelo indice, e para o seu segundo problema, acho que vc deve inciar seu contador com 0.

:wink: esporo ter ajudado

BrenoSalgado

remover pelo indice? como?
setando pra null?

ah, e sim, era mesmo esse o erro ocorrendo, ele tava percorrendo a length da palavra e por isso tava dando o erro, obrigado :stuck_out_tongue:

abelgomes

lista.remove[indice da letra], tu vais procurar a letra…e qaundo tu achar a primeira ao inves de remover lista.remove[letra] entao remove a letra pelo indicie, pq assim mesmo que seja tudo AAAAAAAAA ele vai remover de 1 por 1 :wink:

BrenoSalgado

hehe tentei mas agora me perdi um pouco na logica
mas como eu tava fazendo um esquema pra ele demonstrar as palavras, quando comecei a usar o remove do arraylist ele não fica certo

tipo

Jogador 1, digite a palavra: asa A palavra contém 3 letras! Jogador 2, digite uma letra! a Jogador 2 chutou a letra: a a a _

então acho que vo te que fazer gambiarra, fazer como eu tava fazendo antes, com um array dos “_ _ _”, um do “a s a” e um arraylist só pra deletar os chars e checar o isEmpty…
mas rola aquela de “deve ter uma lógica melhor pra fazer isso…” hehehe

bom, valeu pela ajuda, vo fazer isso amanhã pq tenho coisa da faculdade pra fazer agora

Criado 15 de setembro de 2008
Ultima resposta 15 de set. de 2008
Respostas 4
Participantes 2