Quando vc faz new int[i],vc está alocando um espaco em memoria pra um array que vai de 0 até i,mas vet[9] não existe,é um endereco inválido,não acessivel.Por isso o ArrayIndexOutOfBounds.
Isso gera um array de 9 posições, ou seja, que vai de 0 a 8. Se tentas resgatar a posição do tamanho do array, ele vai reclamar mesmo de ArrayIndexOutOfBoundsException.
Essa dúvida é comum e é difícil uma literatura que explique bem isso.
Até!
P
Pitagoras
Seu array tem 9 posições, ou seja, seu array vai de 0 a 8, portanto a posição 9 é inválida. Lembrar que um array começa do 0.
Espero ter ajudado
henry.everton
Bom entao se eu fizer por exemplo um i=i-1 ele irá dar certo?
henry.everton
po legal o array passou, mas agora ele está dando errado no if do mesmo arquivo.... e é o mesmo erro...
ele está dando o mesmo erro aqui agora... será q como solução posso criar este cont fora do for... atribuir o valor 9 e tirar 1 e depois colocado dentro do for?
henry.everton
henry.everton:
po legal o array passou, mas agora ele está dando errado no if do mesmo arquivo.... e é o mesmo erro...
ele está dando o mesmo erro aqui agora... será q como solução posso criar este cont fora do for... atribuir o valor 9 e tirar 1 e depois colocado dentro do for?
olha o erro
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at Imprime.ImprimeTab(Imprime.java:12)
at Tabuleiro.Tab(Tabuleiro.java:29)
at Jogadores.main(Jogadores.java:42)
maquiavelbona
O que queres fazer e que erro ocorre?
maquiavelbona
Veja esse exemplo:
publicclassteste{publicstaticvoidImprimeTab(intposicao){intvet[];inti=9;vet=newint[i];// array de int com 9 posicoesi=i-1;vet[i]=posicao;//está alocando em vet[8] SEMPRE!for(intcont=1;cont<9;cont++){if(vet[i]==cont){// vai comparar sempre vet[8] com um valor de 1 a 8System.out.println(cont);}}}publicstaticvoidmain(String[]args){ImprimeTab(0);//não imprime nadaImprimeTab(6);// imprime 6ImprimeTab(9);//não imprime nada}}
henry.everton
Seguinte…
Com o resultado que recebi de posicao, quero comparar se vet[i]==cont ele ira imprimir o código com o vet[i], se nao ele imprime em branco… é um jogo da velha q estou fazendo isso irá imprimir o tabuleiro com a posição digitada… to colocando todo o código pra vc entender melhor.
ele está dando o mesmo erro aqui agora... será q como solução posso criar este cont fora do for... atribuir o valor 9 e tirar 1 e depois colocado dentro do for?
cuma??
Olha..tem umas coisas que eu não saquei no teu código.Nem eu e mais uns 3 aqui do lado. (Tirei as linhas que nao vêm ao caso)
publicclassTabuleiro{intposicao=0;intlocal[];intcont=9;publicintTab(){try{local=newint[cont];cont=cont-1;local[cont]=posicao;[b]for(cont=1;cont<=9;cont++){if(local[cont]==0){[/b]d=newDataInputStream(System.in);rec=d.readLine();posicao=Integer.parseInt(rec);[b]cont=cont-1;local[cont]=posicao;[/b]}[b]if(local[cont]<=9){[/b]System.out.println("A posição no tabuleiro é: "+local[cont]);ImprimeImprimeTabuleiro=newImprime();ImprimeTabuleiro.ImprimeTab(local[cont]);break;}[b]elseif(local[cont]>9){System.out.println("*****A POSIÇÃO "+local[cont]+" DIGITADA É INVÁLIDA***** ");System.out.println(" ");local[cont]=1;[/b]}}}return(local[cont]);}}
cont não indica as posições da matriz 3x3,[0;8]?Suponho que esse local armazene as jogadas numa dada posição (representada pelo indice).Pergunta:se eu jogar na posicao maior do que o maximo indexado pelo array,se a posição é inválida,não deveria ter um prompt para entrar com a posição até que ela esteja no intervalo [0;8]?Por que vc faz local[cont]=1,atribuindo a mesma posição válida a trocentas jogadas erradas? (ao menos foi isso que deu pra entender do código)
E pq um for pra cada um dos jogadores (9 jogadas para cada um)?nao deveria ser alternado?