Boa noite, estou com o seguinte problema:
Estou fazendo um programinha basico e primeiro estava tendo problema com excessao, aparecia este erro:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Presidiario.cadastro(Presidiario.java:32)
at Principal.main(Principal.java:12)
import javax.swing.JOptionPane;
public class Presidiario extends Cadeia{
private int x=5; //<<<< AKI QUE EU TIVE QUE INICIALIZAR
private String[] nome_det= new String[x];
private String[] cela= new String[x];
private String[] crime= new String[x];
private String[] pena= new String[x];
public Presidiario(String nome, String capacidade, String tipo, String diretor, String cidade, String estado )
{
super(nome,capacidade,tipo,diretor,cidade,estado);
}
public Presidiario()
{
}
public void numero_det()
{
x=Integer.parseInt(JOptionPane.showInputDialog("Digite o numero de Detentos no Presidio"));
}
public void cadastro()
{
for (int i = 0;i<x;i++)
{
nome_det[i]=JOptionPane.showInputDialog("Digite o nome do presidiario");
cela[i]=JOptionPane.showInputDialog("Digite a cela em que está o presidiario");
crime[i]=JOptionPane.showInputDialog("Digite o crime cometido");
pena[i]=JOptionPane.showInputDialog("Digite a pena do presidiario");
}
}
public void escolha()
{
int op;
op=Integer.parseInt(JOptionPane.showInputDialog("Digite '1' para ver os nomes dos presidiarios \n'2' para ver os nomes e suas respectivas celas \n'3' para ver os nomes, celas e crime e pena \n'4' para ver os dados completo do presidiario e presidio"));
switch(op)
{
case 1:
for(int i=0;i<x;i++)
{
JOptionPane.showInputDialog(null,"Nome: "+nome_det[0]);
}
break;
case 2:
for(int i=0;i<=x;i++)
{
JOptionPane.showInputDialog(null,"Nome: "+nome_det[i]+"\nCela: "+cela[i]);
}
break;
case 3:
for(int i=0;i<=x;i++)
{
JOptionPane.showInputDialog(null,"Nome: "+nome_det[i]+"\nCela: "+cela[i]+"\nCrime: "+crime[i]+"\nPena: "+pena[i]);
}
break;
case 4:
Cadeia c=new Cadeia(" "," "," "," "," "," ");
JOptionPane.showInputDialog(null,"*************DADOS DO PRESIDIO**************");
JOptionPane.showInputDialog(null,"Nome do Presidio: "+c.getNome()+"\nCapacidade: "+c.getCapacidade()+"\nTipo: "+c.getTipo()+"\nDiretor: "+c.getDiretor()+"\nCidade: "+c.getCidade()+"/"+"Estado: "+c.getEstado());
for(int i=0;i<=x;i++)
{
JOptionPane.showInputDialog(null,"Nome: "+nome_det[i]+"\nCela: "+cela[i]+"\nCrime: "+crime[i]+"\nPena: "+pena[i]);
}
break;
default: JOptionPane.showInputDialog(null,"Entrada invalida!");
Presidiario m = new Presidiario();
m.escolha();
break;
}
}
public void voltarMenu()
{
Menu a=new Menu();
a.escolha1();
}
}
ao meu entender, e foi por isso que declarei o vetor como global, seria para qdo lesse o vetor eu pudesse usa-lo em outro método ja com os dados que foram inseridos depois.
como estou começando agora, queria saber se tem como fazer o vetor dinamico, tipo a pessoa entra com o valor de posições o vetor terá (em c# eu fazia isso e nunca tive esse problemas), e o porquê dele está dando null quando lê.
espero que tenham me entendido, obrigado desde já.
mais uma duvida, não tem a ver com o codigo acima, mas seria possivel uma classe herdar um vetor ou matriz? pq eu soh conseguia fazer herdar uma unica posicao do vetor entaum fica a duvida ai, se alguem souber responder.
AA E OUTRA COISA, antes que perguntei pq akele metodo construtor que não faz nada, é pq no case default caso fosse digitado errado ele chamaria o metodo escolha denovo. se alguem tiver dicas de como melhorar meu código ... :D
