Erro newbie [Resolvido]

10 respostas
E
Bom galera, eu ainda to iniciando em java e por isso não to conseguindo corrigir esse erro nem a pau :T Deve ser alguma coisa bem besta mais eu não to conseguindo achar então se puderem me ajudar a achar o erro.
public class Arquivo {
    private String nome;
    private String extensao;
    private Integer tipo;
    private Integer codigo;
    private Integer data;
    Integer random;
    Integer classificador;
    String t;
    String [] v;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getExtensao() {
        return extensao;
    }

    public void setExtensao(String extensao) {
        this.extensao = extensao;
    }

    public Integer getTipo() {
        return tipo;
    }

    public void setTipo(Integer tipo) {
        this.tipo = tipo;
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public Integer getData() {
        return data;
    }

    public void setData(Integer data) {
        this.data = data;
    }

    public Integer preencherCampos() {

        System.out.println("Digite o nome do arquivo: ");
        Scanner scanner = new Scanner(System.in);
        t = scanner.nextLine();
        v = t.split("_");

        if(v[0].equals("bol"))
            classificador = 1;
        else if(v[0].equals("fql")&& v.length < 5)
            classificador = 2;
        else if(v[0].equals("fqss"))
            classificador = 3;
        else if(v[0].equals("fqsf"))
            classificador = 4 ;
        else if(v[0].equals("fqa"))
            classificador = 5 ;
        else if(v[0].equals("fin"))
            classificador = 6;
        else if(v[0].equals("flst"))
            classificador = 7;
        else if(v[0].equals("lcss"))
            classificador = 8;
        else if(v[0].equals("Pluv"))
            classificador = 9;
        else if(v[0].equals("Rel") && v[1].equals("Prod"))
            classificador = 10;
        else if(v[0].equals("Prog") && v[1].equals("Prog"))
            classificador = 11;
        else if(v[0].equals("Rel")&& v.length < 5)
            classificador = 12;
        else if(v[0].equals("Rel") && v.length == 5)
            classificador = 13;
        else if(v[0].equals("Banco"))
            classificador = 14;
        else if(v[0].equals("fql") && v.length == 5)
            classificador = 15;
        else classificador = 16;

        nome = t;
        extensao = v[1];
        codigo = Integer.parseInt(v[1]);
        tipo = classificador;
        data = Integer.parseInt(v[3]);

        System.out.println(nome);
        System.out.println(extensao);
        System.out.println("O arquivo é do tipo:" + tipo);

        return random;
    }
}
Classe Main
public class Main extends Arquivo {   
    public static void main(String[] args) {

        Arquivo arq = new Arquivo();
        arq.preencherCampos();

    }
}
E o erro que ta dando:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
        at leitorarquivo.Arquivo.preencherCampos(Arquivo.java:105)
        at leitorarquivo.Main.main(Main.java:8)
Java Result: 1

Como ele tá apontando um ArrayIndexOutOfBoundsException eu tentei inicializar o vetor v já com tamanho 5, para garantir que eu não estava me referindo a nenhum índice inexistente,
mas o erro continuou :T
Agradeço desde já !

10 Respostas

drigo.angelo

Debuga seu codigo, ve o que está dentro do “v” na hora que ele chega no erro… se a String for do tipo “valor_valor” vai dar erro sim…

drigo.angelo

Alias, se esses nomes de arquivos não forem ficar sendo modificados, acho que seria mais interessante criar um enum e usar o switch … case :stuck_out_tongue:

E

E porque vai dar erro se for “valor_valor” ?´
É mais ou menos isso eu acho, um exemplo de entrada seria : fql_00000000_0000.00_00
Porém essa entrada por exemplo funciona, vi qe o erro acontece se o vetor tiver apenas 3 indices.
Mais porque ? :S

Edit : Realmente um switch case seria mais viável! xD
Eu vou trocar dps, obrigado.

drigo.angelo

Se a entrada for do tipo “valor1_valor2” a sua variável v fica assim:
v[0] --> “valor1”
v[1] --> “valor2”
–. 2 posições
v[3] --> ArrayIndexOutOfBoundsException :evil:

se você iniciar um array a com as 5 posições e copiar os valores de v para esse array, fica assim:
a[0] --> “valor1”
a[1] --> “valor2”
a[2] --> null
a[3] --> null
a[4] --> null
–. 5 posições
Integer.parseInt(v[3]) --> NumberFormatException, ou talvez NullPointerException :evil:

logo, para acessar o valor de v[3], o array v deve ter, no mínimo 4 posições xD

Update: No caso de fql_00000000_0000.00_00 deveria dar certo! tá dando erro também :?:

E

Não tá dando erro não que nem eu falei, ela funciona normal !
Nao funciona se o vetor tiver 3 indices, por exemplo : bol_00000000_0000.00
Ai dá erro :T
Então o que eu tenho que usar é arraylist ?
Edit : Acho que intendi :oops: , eu to usando v[3] quando o indice não existe ou é nulo né ?

gilmaslima

Ou vc pode verificar o tamnho do array antes de fazer isso:

data = Integer.parseInt(v[3]);

Ou colocar num loop:

for(int i = 0; i < v.length; i++){
if(i == 0){
// faz alguma coisa
} 
if(i == 1){
// faz outra coisa
} 

if(i == 3){
data = Integer.parseInt(v[3]); 
}

Assim vc garante que não está tentando acessar um indice inválido.

E

,_ ò.Ó _/,/
Brigadão galera, 6 são foda !
Abrssão

M

umas dicas pequenas…

Não adiantaria você inicializar seu vetor com 5 posições, se na linha 57 você substitui a referência, fazendo seu vetor ficar com o tamanho retornado pelo split.
Seria melhor você colocar algumas verificações no seu código, por exemplo:
Você pega a posição 3 do seu vetor, para pegar uma data. Então nesse caso seu vetor deve ter no mínimo 4 elementos, se você verificar isso antes, você evita esse ArrayIndexOutOfBoundsException.

E

Mathias, eu também tentei fazer isso, colocar um verificação antes de fazer data receber o valor do indice 3. Mas mesmo assim deu erro :S
Mais eu vi que meu código pode ser melhorado em mta coisa ainda xD
Vou dar uma pesquisada aqui. Obrigado pelas dicas !

E

Eu tava tentando colocar o formato 0000.00 num int, acho que por isso deu erro xD
Tinha um ponto :oops: , quando deixei como String funcionou =D

Criado 17 de março de 2011
Ultima resposta 17 de mar. de 2011
Respostas 10
Participantes 4