Programação Java - Problema com atribuição

Bom dia

Estou com um problema de atribuição de valores.

Estou passando como parametro de inteiro vetorizado para um método de uma classe.

O programa compila normalmente, mas apos colocar os parametros ele esta dando erro de array.

vou anexar os 3 arquivos, se for possível me ajudar agradeço muito…

[code]public void ImprimeTab(int posicao){

	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.

[code]public void ImprimeTab(int posicao){

	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.

Até!

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

Bom entao se eu fizer por exemplo um i=i-1 ele irá dar certo?

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)

O que queres fazer e que erro ocorre?

Veja esse exemplo:

[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
}

}[/code]

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.

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?