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

10 respostas
henry.everton

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…

10 Respostas

I
public void ImprimeTab(int posicao){

		int vet[];

		int i=9;

		vet= new int [i];
		vet[i]=posicao;

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.

maquiavelbona
public void ImprimeTab(int posicao){

		int vet[];

		int i=9;

		vet= new int [i];
		vet[i]=posicao;
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

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...

public void ImprimeTab(int posicao){
		int vet[];
		int i=9;
		vet= new int [i];
		[b]i=i-1; [/b]// 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

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...
public void ImprimeTab(int posicao){
		int vet[];
		int i=9;
		vet= new int [i];
		[b]i=i-1; [/b]// 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

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:
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
	}
}
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.

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++;
		}
	}
}
I
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)

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;

[b]			for (cont=1; cont<=9; cont++){
				if(local[cont]==0){[/b]
					d = new DataInputStream(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]);
					Imprime ImprimeTabuleiro = new Imprime();
					ImprimeTabuleiro.ImprimeTab(local[cont]);
					break;
					}
[b]				else if(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?

Criado 11 de abril de 2007
Ultima resposta 11 de abr. de 2007
Respostas 10
Participantes 4