Inserir elementos da lista em um vetor [RESOLVIDO]

9 respostas
vanessa.tenorio

Bom dia!

Pessoal, tenho uma lista preenchida por seis números, como faço para inserir estes elementos da lista em um vetor?

Minhas tentativas não foram bem sucedidas.

public static List abrirDoDisco() {
    // Abrindo o arquivo usando um arrayList, imprimindo o arquivo na tela 
        String linha;
        List lista1 = new ArrayList();
        int[] vetorSenha =  new int[6];

        try {
            File file = new File("Senha.bin");

            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
            while (br.ready()) {
                linha = br.readLine();
                lista.add(linha);
                lista1.add(linha);
            }
            br.close();

        } catch (FileNotFoundException e) {
            System.out.println("Erro: " + e.getMessage());


        } catch (IOException e) {
            System.out.println("Erro: " + e.getMessage());

        }
        
        
        for (int i = 0; i < lista.size(); i++) {
            System.out.println(lista.get(i));
          //  vetorSenha[i] = (Integer) (lista.get(i)); // ERRO
        }

        
        //Retorna uma lista
        return lista1;
    }

Agradeço a todos que puderem me ajudar!!!

9 Respostas

asousaj

Vanessa, bom dia.

Estava usando variável ‘lista’ onde seria ‘lista1’.

vanessa.tenorio

asousaj, muito obrigada pela observação, porém, mesmo alterando a variável, o erro se mantém: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

Penso que pode estar nos valores lidos.

Estou gravando da seguinte forma:

public static void gravarEmDisco(int[] vet) {

        try {
            File file = new File("Senha.bin");
            BufferedWriter buffer = new BufferedWriter(new FileWriter(file));
            for (int i = 0; i < vet.length; i++) {
                buffer.write(vet[i]+"");
                buffer.newLine();
            }
            
            buffer.close();
            System.out.println("Arquivo senha gravado com sucesso");

        } catch (IOException e) {
            System.out.println("Falha na gravação do arquivo " + e);
        }
    }
Ruttmann

Posta todo o stacktrace do erro que você recebe.

Você tem certeza que nesse arquivo que estás lendo só tem números? Se tiver letras dá erro de Cast.

E mais, dependendo do tamanho da sequência de números que você estiver lendo vai dar erro de Cast também.

Observe que a constante MAX_VALUE da classe Integer retorna este valor: [telefone removido].

Ou seja, se você tiver uma sequência como 546145689418989, obviamente vai ter erro de Cast.

Aí você pode usar outra classe, como por exemplo, BigInteger.

:wink:

vanessa.tenorio

Ruttmann, conforme me solicitou, segue todo o erro:

Exception in thread AWT-EventQueue-0 java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

at Interfaces.ArquivoSenha.abrirDoDisco(ArquivoSenha.java:132)

at Interfaces.TE7014HAConfiguracaoInterface.jLabelBotaoAplicarLoginMouseClicked(TE7014HAConfiguracaoInterface.java:12489)

at Interfaces.TE7014HAConfiguracaoInterface.access$10300(TE7014HAConfiguracaoInterface.java:51)

at Interfaces.TE7014HAConfiguracaoInterface$41.mouseClicked(TE7014HAConfiguracaoInterface.java:5839)

at java.awt.Component.processMouseEvent(Component.java:6508)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)

at java.awt.Component.processEvent(Component.java:6270)

at java.awt.Container.processEvent(Container.java:2229)

at java.awt.Component.dispatchEventImpl(Component.java:4861)

at java.awt.Container.dispatchEventImpl(Container.java:2287)

at java.awt.Component.dispatchEvent(Component.java:4687)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)

at java.awt.Container.dispatchEventImpl(Container.java:2273)

at java.awt.Window.dispatchEventImpl(Window.java:2719)

at java.awt.Component.dispatchEvent(Component.java:4687)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)

at java.awt.EventQueue.access$200(EventQueue.java:103)

at java.awt.EventQueue$3.run(EventQueue.java:694)

at java.awt.EventQueue$3.run(EventQueue.java:692)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)

at java.awt.EventQueue$4.run(EventQueue.java:708)

at java.awt.EventQueue$4.run(EventQueue.java:706)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Em resumo, este erro aponta diretamente para a linha grifada como erro.

Ruttmann

Primeiramente, você tem que se assegurar que não vá acontecer o caso que relatei no post anterior.

Segundo, não se faz cast nesse caso, não observei antes e só agora notei que tá errado.

Faça como abaixo:

vetorSenha[i] = Integer.parseInt(lista.get(i));

Você tem que fazer um parse, não Cast.

Cast só funciona para tipos de dados que contém outro tipo. Exemplo, você pode fazer Cast de Integer para Double, pois Double pode conter Integer.

Teste e veja se funciona! :wink:

vanessa.tenorio

Infelizmente não funcionou =(

Apresenta que o método Integer.parseInt é aplicado a uma String, e o que tenho é um objeto.

Mesmo assim, muito obrigada pela colaboração.

asousaj

vanessa.tenorio:
Infelizmente não funcionou =(
Apresenta que o método Integer.parseInt é aplicado a uma String, e o que tenho é um objeto.

Muda a declaração de lista 1 que resolve.

Melhor opção

List<String> lista1 = new ArrayList<String>();

Outra opção

vetorSenha[i] = Integer.parseInt((String)lista.get(i));
Ruttmann

vanessa.tenorio:
Infelizmente não funcionou =(

Apresenta que o método Integer.parseInt é aplicado a uma String, e o que tenho é um objeto.

Mesmo assim, muito obrigada pela colaboração.

Mas ali na linha 12 do primeiro trecho de código que você postou, você está adicionando a linha lida do arquivo a uma variável String, que em seguida(linha 13) é adicionada ao seu ArrayList.

Uma String é um objeto.

Outra coisa que observei é que você não está usando Generics nesse ArrayList. Experimente adicionar o Generics na instanciação do ArrayList pra ver o que acontece…

vanessa.tenorio

Ruttmann e asousaj, muitíssimo obrigada pela ajuda!

Problema resolvido com a alteração da declaração apontada por asousaj:

vetorSenha[i] = Integer.parseInt((String)lista.get(i));

A contribuição de vocês é de imenso valor!!!

Criado 22 de outubro de 2013
Ultima resposta 22 de out. de 2013
Respostas 9
Participantes 3