int vet[];
int i=9;
vet= new int [i];
vet[i]=posicao;
[/code]
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.
int vet[];
int i=9;
vet= new int [i];
vet[i]=posicao;
[/code]
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.
po legal o array passou, mas agora ele está dando errado no if do mesmo arquivo… e é o mesmo erro…
[code]public void ImprimeTab(int posicao){
int vet[];
int i=9;
vet= new int [i]; i=i-1; // com isso passou da condição normal
vet[i]=posicao;
for(int cont=1; cont<9;cont++){
[b]if (vet[i]==cont){[/b] // agora o erro é aqui[/code]
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?
[quote=henry.everton]po legal o array passou, mas agora ele está dando errado no if do mesmo arquivo… e é o mesmo erro…
[code]public void ImprimeTab(int posicao){
int vet[];
int i=9;
vet= new int [i]; i=i-1; // com isso passou da condição normal
vet[i]=posicao;
for(int cont=1; cont<9;cont++){
[b]if (vet[i]==cont){[/b] // agora o erro é aqui[/code]
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?[/quote]
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)
[code]public class teste {
public static void ImprimeTab(int posicao) {
int vet[];
int i=9;
vet= new int [i];// array de int com 9 posicoes
i=i-1;
vet[i]=posicao;//está alocando em vet[8] SEMPRE!
for(int cont=1; cont<9;cont++){
if (vet[i]==cont){// vai comparar sempre vet[8] com um valor de 1 a 8
System.out.println(cont);
}
}
}
public static void main(String[] args) {
ImprimeTab(0);//não imprime nada
ImprimeTab(6);// imprime 6
ImprimeTab(9);//não imprime nada
}
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.
public class Imprime{
public void ImprimeTab(int posicao){
int vet[];
int i=9;
vet= new int [i];
i=i-1;
vet[i]=posicao;
for(int cont=1; cont<=9;cont++){
if (vet[i]==cont){
System.out.println("_ _ _");
System.out.println("| |");
System.out.println("|"+vet[i]+"|");
System.out.println("| |");
System.out.println("- - -");
}
else{
System.out.println("_ _ _");
System.out.println("| |");
System.out.println("| |");
System.out.println("| |");
System.out.println("- - -");
}
i++;
}
}
}
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)
[code]
public class Tabuleiro {
int posicao=0;
int local[];
int cont=9;
public int Tab(){
try{
local=new int[cont];
cont = cont - 1;
local[cont]=posicao;
for (cont=1; cont<=9; cont++){
if(local[cont]==0){
d = new DataInputStream(System.in);
rec=d.readLine();
posicao=Integer.parseInt(rec); cont = cont - 1;
local[cont]=posicao;
} if (local[cont]<=9){
System.out.println("A posição no tabuleiro é: "+ local[cont]);
Imprime ImprimeTabuleiro = new Imprime();
ImprimeTabuleiro.ImprimeTab(local[cont]);
break;
} else if(local[cont]>9){
System.out.println("A POSIÇÃO “+local[cont]+” DIGITADA É INVÁLIDA “);
System.out.println(” ");
local[cont]=1;
}
}
}
return(local[cont]);
}
}[/code]
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?