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()
at TextDvd.main(TextDvd.java:12) (eh essa linha>> chamaDvd.cadastraDvd()
[/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]