[ERRO] Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0[RESOLVIDO]

Eu estou fazendo uma trabalho de faculdade onde devo armazer algumas informaçoes sobre DVDs e exibilas na tela posteriormente, no intanto esta aparecendo o seguinte erro:

[quote]Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0
at Dvd.cadastraDvd(Dvd.java:81)
at TextDvd.main(TextDvd.java:12)
[/quote]

Segue o codigo completo da classe:

//Programa armazena informações de DVDs e exibe na tela.

import java.util.Scanner;

public class Dvd 
{
	int x=0;
	String[] titulo = new String[x]; 
	String[] genero = new String[x];
	int[] copias = new int[x];
	int[] codigo = new int[x];
	
	public void setTitulo( String[] titulo1)
	{
		titulo = titulo1;
	}
	
	public String[] getTitulo()
	{
		return titulo;
	}//fim set e get
	
	public void setGenero( String[] genero1)
	{
		genero = genero1;
	}
	
	public String[] getGenero()
	{
		return genero;
	}//end set get genero
	
	public void setCopias( int[] copias1)
	{
		copias = copias1;
	}
	
	public int[] getCopias()
	{
		return copias;
	}//end set get copias
	
	public void setCodigo( int[] codigo1)
	{
		codigo = codigo1;
	}
	
	public int[] getCodigo()
	{
		return codigo;
	}//end set get codigo
	
	public void setContador( int contador1)
	{
		x = contador1;
	}
	
	public int getContador()
	{
		return x;
	}//end set get x
	
	public void cadastraDvd()
	{
		Scanner input = new Scanner(System.in);
		
		System.out.print("Quantos DVDs deseja cadastrar? ");
			x = input.nextInt();
			
			for( int j = 0 ; j < x ; j++ )
			{
				String[] titulo2 = new String[j]; 
				String[] genero2 = new String[j];
				int[] copias2 = new int[j];
				int[] codigo2 = new int[j];
				
				codigo2[j] = j+100;//gerando codigo do dvd
				setCodigo(codigo2);//gerando codigo do dvd
				
				System.out.print("Entre com o numero de copias que o DVD possuir: ");
				copias2[j] = input.nextInt();
				setCopias( copias2 );
				
				
				System.out.print("Digite o título do filme: ");
				titulo2[j] = input.nextLine();
				setTitulo( titulo2 );
				
				System.out.print("Escolha o nº que corresponde ao gênero do filme: ");
				System.out.print("1-Ação; 2-Romance; 3-Comédia; 4-Terror ");
				genero2[j] = input.nextLine();
				setGenero( genero2 );
				
				 if ( genero[j] .equals("1") )
				 	{
					 	genero[j] = "Ação"; 
				 	}
				 else 
					 if ( genero[j].equals("2") )
					 	{
						 	genero[j] = "Romance"; 
					 	}
					 else 
						 if ( genero[j].equals("3") )
						 	{
							 	genero[j] = "Comédia"; 
						 	}
						 else 
							 if ( genero[j].equals("4") )
							 	{
								 	genero[j] = "Terror"; 
							 	}
				 
					 else 
						 System.out.print("Opção Invalida. \n\n"); 
				

			}//end for
	}//end method cadastra dvd
			
			public void exibeDvd()
			{
				for(int y =0; y<getContador(); y++)
				System.out.println("Os Dvds cadastrados são:");
				System.out.printf("Código: %d; Título: %s; Gênero: %s; " +
						"Número de Cópias: %d \n", codigo[getContador()],
						titulo[getContador()], genero[getContador()],copias[getContador()] );
			}//end method exibeDvd
		
}//end class

classe main:

public class TextDvd {


	public static void main(String[] args) 
	{
		Dvd chamaDvd = new Dvd();
		
		System.out.print("Dvd-Locadora \n© 2008 Minas Hacker's Informática \nVersão 1.0 \nTodos os direitos reservados" +
		" \nUso exclusivo da DVD Now S/A \n\nBem-Vindo!\n\n");     

		chamaDvd.cadastraDvd();
		chamaDvd.exibeDvd();
	}
}

Estou tentado resolver mas ainda nao consegui

Nao tive paciencia pra ler o codigo todo, mas no inicio ja vi o provavel erro.

Cara, nota só. Você tá criando um array com tamanho zero. Isso é impossivel. Quando você declarou a variavel X você inicializou ela com o valor 0.

Certamente é esse seu X sendo 0, como disse o Sérgio 8)

vo dar uma olha aki, vlw

copia e cola o codigo ae q vai rodar ate chegar no erro!

eu nao declarei valor para x.

e o erro foi o mesmo:

[quote]Todos os direitos reservados
Uso exclusivo da DVD Now S/A

Bem-Vindo!

Quantos DVDs deseja cadastrar? 10
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0
at Dvd.cadastraDvd(Dvd.java:77) (eh essa linha>> chamaDvd.cadastraDvd():wink:
at TextDvd.main(TextDvd.java:12) (eh essa linha>> chamaDvd.cadastraDvd():wink:
[/quote]

cara, porque vc cria as instâncias dentro do FOR? acho que sua idéia seria jogar as informações dentro dos vetores a cada passagem do FOR, porém vc está fazendo a instância de TITULO, GENERO, COPIAS2 E CODIGO2 a cada iteração do FOR. Sugiro que trocasse aqueles iF’s / ELSE por um switch


switch(genero[j]){

case "1": genero[j] = "Ação"; break;
case "2": genero[j] = "Romance"; break;
case "3": genero[j] = "Comédia"; break;
case "4": genero[j] = "Terror"; break;

}

sugiro que não use a mesma variável para a escolha e para setar o valor

Sugiro que revise esse código abaixo:

/* se vc colocar x==0, vc diz que essa variavel nao recebe valor, logo os sets nao poderão ser executados   */

    int x=0;
    String[] titulo = new String[x];   
    String[] genero = new String[x];   
    int[] copias = new int[x];   
    int[] codigo = new int[x];   
       
    public void setTitulo( String[] titulo1)   
    {   
        titulo = titulo1;   
    }   
    

eu faria dessa forma

    String[] titulo;
       
    public void setTitulo( String[] titulo1)   
    {   
        titulo = titulo1;   
    }  
    .
    .
    . 

se vc tem um método que seta a variável Titulo, não precisa instanciar ela. Porém vc deve ter ela instanciada em outra classe.

isso tá me parecendo um Ctrl C , Ctrl V de algum lugar…

da uma olhada se isso pode ajudar a solucionar…

[quote=rafa-projeseg]eu nao declarei valor para x.

e o erro foi o mesmo:

[quote]Todos os direitos reservados
Uso exclusivo da DVD Now S/A

Bem-Vindo!

Quantos DVDs deseja cadastrar? 10
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0
at Dvd.cadastraDvd(Dvd.java:77)
at TextDvd.main(TextDvd.java:12)
[/quote][/quote]

int x=0;   
    String[] titulo = new String[x];     
    String[] genero = new String[x];     
    int[] copias = new int[x];     
    int[] codigo = new int[x];     
         
    public void setTitulo( String[] titulo1)     
    {     
        titulo = titulo1;     
    } 

amigo esse é seu código…vc ta jogando 0 em x…

Não, é?

int x=0;  

E isto é o que?? hihihihi

[quote]
Thiago Domingues

cara, porque vc cria as instâncias dentro do FOR? acho que sua idéia seria jogar as informações dentro dos vetores a cada passagem do FOR, porém vc está fazendo a instância de TITULO, GENERO, COPIAS2 E CODIGO2 a cada iteração do FOR[/quote]

eu tirei as declaraçoes para fora do for, porem, porem o erro continua:

public void cadastraDvd()
	{

		int x2;
		int j =0;
		int[] copias2 = new int[j];
		int[] codigo2 = new int[j];
		String[] titulo2 = new String[j]; 
		String[] genero2 = new String[j];

		
		Scanner input = new Scanner(System.in);
		
		System.out.print("Quantos DVDs deseja cadastrar? ");
			x2 = input.nextInt();
			setContador(x2);
			
			
			for(j = 0 ; j < x ; j++ )
			{
...

estou trocando o if por swith!
teve um pouco d c+c e c+v d poucas partes d um programa parecido q eu tinha feito a uns 2 meses atraz! rsr, mas a maioria eu comecei agora…

vlw pela ajuda!

CintiaDR: eu eu coloquei o x=0, mas o erro perciste! obrigado!! (o mesmo erro!)

cara, tenta fazer o que eu postei no meu código, ao inves de instanciar a string nessa classe, ela só recebe a string pelo método Set, não há a necessidade de vc instanciar nessa classe se vc ta recebendo…vc não pode fazer X = 0

mais uma vez, faça isso

String[] titulo;

public void setTitulo(String[] titulo){
   this.titulo = titulo;
}

ao inves disso

String[] titulo = new String[x];

public void setTitulo(String[] titulo){
   this.titulo = titulo;
}

Pra você entender o problema vou colocar um exemplo:


final static int UM_NUMERO_GIGANTESCO=1000000;  

String[] titulo = new String[UM_NUMERO_GIGANTESCO];   
String[] genero = new String[UM_NUMERO_GIGANTESCO];  
int[] copias = new int[UM_NUMERO_GIGANTESCO];  
int[] codigo = new int[UM_NUMERO_GIGANTESCO];  

Onde UM_NUMERO_GIGANTESCO é sua quantidade máxima de itens nos arrays!

Se vc tentar acessar:

 String str = titulo[UM_NUMERO_GIGANTESCO]; 

ou

 String str = titulo[UM_NUMERO_GIGANTESCO + 1]; 

Ou qualquer valor maior ou igual a UM_NUMERO_GIGANTESCO vai dar este erro. Dê uma procurada no Oráculo a respeito de [google]ArrayIndexOutOfBoundsException[/google]

— Editado —
Depois que vc entender, e quiser um array de tamanho dinâmico por alguma razão, busque por [google]Arraylist[/google]

cara, um Array em Java começa sempre pelo índice ZERO. ou seja.

String[] teste = new String[10]

seu índice vai de ZERO a NOVE...........

teste[0]
teste[1]
teste[2]
teste[3]
teste[4]
teste[5]
teste[6]
teste[7]
teste[8]
teste[9]

todos que postaram aqui nesse tópico estão dizendo a mesma coisa…será que somos nós que precisamos olhar esse link???

[quote=Thiago Domingues]cara, um Array em Java começa sempre pelo índice ZERO. ou seja.

String[] teste = new String[10]

seu índice vai de ZERO a NOVE...........

teste[0]
teste[1]
teste[2]
teste[3]
teste[4]
teste[5]
teste[6]
teste[7]
teste[8]
teste[9]

todos que postaram aqui nesse tópico estão dizendo a mesma coisa…será que somos nós que precisamos olhar esse link???
[/quote]

Eu fiz conforme vc sujerio! e sobre o array eu ja tinha mudado! mas continua dando o mesmo problema!

no entando depois desta ultima mudando meus array n estao sendo iniciados, conforme segue abaixo:

[code]
//Programa armazena informações de DVDs e exibe na tela.

import java.util.Scanner;

public class Dvd
{
int x;
String[] titulo;
int[] genero;
String[] generoReal;
int[] copias;
int[] codigo;

public void setTitulo( String[] titulo1)
{
	this.titulo = titulo1;
}

public String[] getTitulo()
{
	return titulo;
}//end set get titulo

public void setGeneroReal( String[] genero2)
{
	this.generoReal = genero2;
}

public String[] getGeneroReal()
{
	return generoReal;
}//end set get generoReal

public void setCopias( int[] copias1)
{
	this.copias = copias1;
}

public int[] getCopias()
{
	return copias;
}//end set get copias

public void setCodigo( int[] codigo1)
{
	this.codigo = codigo1;
}

public int[] getCodigo()
{
	return codigo;
}//end set get codigo

public void cadastraDvd()
{
	Scanner input = new Scanner(System.in);
	
	System.out.print("Quantos DVDs deseja cadastrar? ");
		x = input.nextInt();
			
		for(int j = 0 ; j < x ; j++ )
		{
			codigo[j] = j+100;
			
			System.out.print("Entre com o numero de copias que o DVD possuir: ");
			copias[j] = input.nextInt();
			
			System.out.print("Digite o título do filme: ");
			titulo[j] = input.nextLine();
			
			System.out.print("Escolha o nº que corresponde ao gênero do filme: ");
			System.out.print("1-Ação; 2-Romance; 3-Comédia; 4-Terror ");
			genero[j] = input.nextInt();
			
			switch(genero[j])
			{   
				case '1': generoReal[j] = "Ação"; break;   
				case '2': generoReal[j] = "Romance"; break;   
				case '3': generoReal[j] = "Comédia"; break;   
				case '4': generoReal[j] = "Terror"; break;   
			}//end switch  
		}//end for
}//end method cadastra dvd

}//end class[/code]

devo voltar a declarar os vetores assim: String[] = teste = new String[10]?

ou deixar cmo esta: String[] teste;
?

O programa postado acima continua dando erro, porem outro, estou pesquisando sobre o erro: java.lang.NullPointerException

obrigado a todos ae!!!

[quote=rafa-projeseg]O programa postado acima continua dando erro, porem outro, estou pesquisando sobre o erro: java.lang.NullPointerException

obrigado a todos ae!!![/quote]

java.lang.NullPointerException significa q eu estou apontando para um objeto que não existe, ou o caminho estah incorreto…

bom, agora vou tentar concertar aqui!

Alguém precisa de aulas de como declarar e instaciar variáveis, especialmente arrays.

Para usar um array você precisa da um new nele, e passar a quantidade de elementos que ele pode comportar.

Eu resolvi fazer primeiro o metodo que armazena as informaçoes do DVD conforme segue codigo:

//Programa armazena informações de DVDs e exibe na tela.

import java.util.Scanner;

public class Dvd 
{
	String[] titulo; 
	int[] genero;
	String[] generoReal;
	int[] copias;
	int[] codigo;
	
	public void cadastraDvd()
	{
		Scanner input = new Scanner(System.in);
		
		System.out.print("Quantos DVDs deseja cadastrar? ");
			int x = input.nextInt();
				
			for(int j = 0 ; j < x ; j++ )
			{
				codigo[j] = j+100;//gerando codigo automatico do DVD
				
				System.out.print("Entre com o numero de copias que o DVD possuir: ");
				copias[j] = input.nextInt();
				
				System.out.print("Digite o título do filme: ");
				titulo[j] = input.nextLine();
				
				System.out.print("Escolha o nº que corresponde ao gênero do filme: ");
				System.out.print("1-Ação; 2-Romance; 3-Comédia; 4-Terror ");
				genero[j] = input.nextInt();
				
				switch(genero[j])
				{   
					case '1': generoReal[j] = "Ação"; break;   
					case '2': generoReal[j] = "Romance"; break;   
					case '3': generoReal[j] = "Comédia"; break;   
					case '4': generoReal[j] = "Terror"; break;   
				}//end switch  
			}//end for
	}//end method cadastra dvd
}//end class

erro:

[quote]Todos os direitos reservados
Uso exclusivo da DVD Now S/A

Bem-Vindo!

Quantos DVDs deseja cadastrar? 10
Exception in thread “main” java.lang.NullPointerException
at Dvd.cadastraDvd(Dvd.java:22)
at TextDvd.main(TextDvd.java:12)
[/quote]

Eu verifiquei q este erro java.lang.NullPointerException significa q eu estou apontando para um objeto que não existe, ou o caminho estah incorreto…

continuo aqui tentando! quem puder me dar uma luz agradeço!

rsr! eu to ficando perdido!

pq inicialmente se vc verificar o codigo q eu postei, minhas array estavao com new etc…

vou voltar a deixar elas conforme vc esta falando entao!

vlww!!!

	[code]System.out.print("Quantos DVDs deseja cadastrar? ");
		x = input.nextInt();

[/code]

a minha ideia inicial era que meu vetor tivesse o tamanha(quantidade) de DVD a cadastrar.

[code]
//Programa armazena informações de DVDs e exibe na tela.

import java.util.Scanner;

public class Dvd
{
int x;
String titulo[] = new String[10];
int genero[] = new int[10];
String generoReal[] = new String[10];
int copias[] = new int[10];
int codigo[] = new int[10];

public void cadastraDvd()
{
	Scanner input = new Scanner(System.in);
	
	System.out.print("Quantos DVDs deseja cadastrar? ");
		x = input.nextInt();
			
		for(int j = 0 ; j < x ; j++ )
		{
			codigo[j] = j+100;//gerando codigo automatico do DVD
			
			System.out.print("Entre com o numero de copias que o DVD possuir: ");
			copias[j] = input.nextInt();
			
			System.out.print("Digite o título do filme: ");
			titulo[j] = input.nextLine();
			
			System.out.print("Escolha o nº que corresponde ao gênero do filme: ");
			System.out.print("1-Ação; 2-Romance; 3-Comédia; 4-Terror ");
			genero[j] = input.nextInt();
			
			switch(genero[j])
			{   
				case '1': generoReal[j] = "Ação"; break;   
				case '2': generoReal[j] = "Romance"; break;   
				case '3': generoReal[j] = "Comédia"; break;   
				case '4': generoReal[j] = "Terror"; break;   
			}//end switch  
		}//end for
}//end method cadastra dvd

}//end class[/code]

assim esta rodando, porem eu delimitei o tamanho do meu array, q era justamente o q eu n queria, vou verificar aqui, pois pelo q estou pesquisando devo terq usar arraylist.

VLw!!

[code]
//Programa armazena informações de DVDs e exibe na tela.

import java.util.Scanner;

public class Dvd
{
int x;
String titulo[];
int genero[];
String generoReal[];
int copias[];
int codigo[];

public void cadastraDvd()
{
	Scanner input = new Scanner(System.in);
	
	System.out.print("Quantos DVDs deseja cadastrar? ");
		x = input.nextInt();

titulo = new String[x];
genero = new int[x];
generoReal = new String[x];
copias = new int[x];
codigo = new int[x];

		for(int j = 0 ; j < x ; j++ )
		{
			codigo[j] = j+100;//gerando codigo automatico do DVD
			
			System.out.print("Entre com o numero de copias que o DVD possuir: ");
			copias[j] = input.nextInt();
			
			System.out.print("Digite o título do filme: ");
			titulo[j] = input.nextLine();
			
			System.out.print("Escolha o nº que corresponde ao gênero do filme: ");
			System.out.print("1-Ação; 2-Romance; 3-Comédia; 4-Terror ");
			genero[j] = input.nextInt();
			
			switch(genero[j])
			{   
				case '1': generoReal[j] = "Ação"; break;   
				case '2': generoReal[j] = "Romance"; break;   
				case '3': generoReal[j] = "Comédia"; break;   
				case '4': generoReal[j] = "Terror"; break;   
			}//end switch  
		}//end for
}//end method cadastra dvd

}//end class[/code]