Consultar doubles de um ArrayList

8 respostas
B

Olá, preciso de ajuda.

Preenchi um ArrayList com diversos valores numéricos em Double.
Preciso retirar os valores para fazer contas com eles. O problema é que os métodos ArrayList.get(int indice) ou Iterator.next() retornam valores Object do ArrayList, e estou tendo problemas em convertelos para Double.

*Já tentei cast direto:

double valor = (double) lista.get(indice);

*Double.parseDouble():

double valor = Double.parseDouble( (String) lista.get(indice));

Tem o cast para String porque parseDouble recebe um String como parâmetro.

O mesmo acontece quando percorro o ArrayList por um Iterator e tento converter os valores pelo método next();

Alguma idéia do que posso fazer? Obrigado!

Na imagem: preenchi um arraylist com numeros de 1 a 10, e estou tentando encontrar a posição do 5.

8 Respostas

fabiolp

Manda o seu código, esse print que vc deu não pega a incialização do seu ArrayList.
Você colocou um ArrayList<Double> ou não?

B
ArrayList list = new ArrayList();
        
        //preenchendo um vetor comum
        int[] vetor=new int[10];
        for (int i=0; i<10;i++){
            vetor[i]=i+1;
            //System.out.println("vetor["+i+"]="+ vetor[i]);
        }
        //transferindo os dados
        for (int i=0; i<10;i++){
            list.add(vetor[i]);
        }

Por mérito de testes com arrays comuns, primeiro criei um vetor, preenchi ele. Depois com os dados, passei tudo pro arraylist.

Não tinha feito isso com não, isso diz pro arraylist que ele armazenará doubles?

fabiolp

Exato ele cria um ArrayList que só irá armazenar double, ai vc não precisa ficar fazendo casting para double.
Você comentou de Double e double, saca a diferença?

fabiolp

Se vc quiser fazer esse mesmo código ficaria assim:

List&lt;Double&gt; valores = new ArrayList&lt;Double&gt;();
 for(int i =0;i&lt;10;i++){
   valores.add(i);
 }
B

Está dando erro. :/

[img]http://i42.tinypic.com/nnoeie.jpg[/img]

Caso queira, aqui está meu código:

package arraylist;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        
        ArrayList<double> list = new ArrayList<double>();
        
        //preenchendo um vetor comum
        int[] vetor=new int[10];
        for (int i=0; i<10;i++){
            vetor[i]=i+1;
            //System.out.println("vetor["+i+"]="+ vetor[i]);
        }
        
        //preenchendo o arraylist chamado list
        System.out.println("O tamanho do arraylist antes de botar dados eh "+list.size());
        for (int i=0; i<10;i++){
            list.add(vetor[i]);
        }
        System.out.println("O tamanho do arraylist depois de botar dados eh "+list.size());
        
        //imprimindo o ultimo
        System.out.println("O ultimo item eh: "+list.get(list.size()-1));
        
        //imprimindo todos
        Iterator i = list.iterator();
        int cont=0;
        while(i.hasNext()){
            System.out.println("lista["+cont+"]="+i.next());
            cont++;
        }
         
        System.out.println("");
        
        //imprimindo o quarto
        System.out.println("quarto item: lista[3]="+list.get(3));
        
        System.out.println("Localizando numero 5");
        
        //localizando um especifico

        for (int contador=0; contador<list.size(); contador++){
            double recebe= Double.parseDouble((String)list.get(contador));
            System.out.println("recebe:"+recebe);
            if (recebe==5){
                System.out.println("Achamos, capitão! o 5 está aqui");
            }else{
                System.out.println("Não achamos");
            }
        }
    }
}
fabiolp

Segue o código corrigido.
No ArrayList para você especificicar um tipo esse tipo não pode ser primitivo, então precisaria de um ArrayList<Double>

import java.util.ArrayList;
import java.util.Iterator;

public class Main {

	public static void main(String[] args) {

		List&lt;Double&gt; list = new ArrayList&lt;Double&gt;();

		// preenchendo um vetor comum
		int[] vetor = new int[10];
		for (int i = 0; i &lt; 10; i++) {
			vetor[i] = i + 1;
			// System.out.println("vetor["+i+"]="+ vetor[i]);
		}

		// preenchendo o arraylist chamado list
		System.out.println("O tamanho do arraylist antes de botar dados eh "
				+ list.size());
		for (int i = 0; i &lt; 10; i++) {
			list.add((double) vetor[i]);
		}
		System.out.println("O tamanho do arraylist depois de botar dados eh "
				+ list.size());

		// imprimindo o ultimo
		System.out.println("O ultimo item eh: " + list.get(list.size() - 1));

		// imprimindo todos
		Iterator i = list.iterator();
		int cont = 0;
		while (i.hasNext()) {
			System.out.println("lista[" + cont + "]=" + i.next());
			cont++;
		}

		System.out.println("");

		// imprimindo o quarto
		System.out.println("quarto item: lista[3]=" + list.get(3));

		System.out.println("Localizando numero 5");

		// localizando um especifico

		for (int contador = 0; contador &lt; list.size(); contador++) {
			double recebe = list.get(contador);
			System.out.println("recebe:" + recebe);
			if (recebe == 5) {
				System.out.println("Achamos, capitão! o 5 está aqui");
			} else {
				System.out.println("Não achamos");
			}
		}
	}
}

Ainda dá para melhorar muito esse código.
Mas a princípio é isso.
PS: Só uma dica, quando você for criar um tópico evite colocar imagem representando seu código, cole ele aqui.
Quando ele estiver dando pau, copie e cole o erro do console.

B

Obrigado mesmo pela ajuda, cara! :smiley:

List<Double> list = new ArrayList<Double>();

Qual a diferença entre criar ele como um List e um ArrayList?

fabiolp

Na verdade você criou um objeto de ArrayList<Double>.
Só que é boa prática vc usar um refência do tipo List que é a interface que ArrayList implmenta.
Estamos ganhando o polimorfismo nesse caso.
Polimorfismo é a capacidade de a gente referenciar um objeto de diferentes formas.
Nada impede de vc usar ArrayList<Double> na referência, mas não é boa prática.
Você já deu uma lida na apostila FJ-11 da Caelum?
Sugiro que dê uma estudada pois essas dúvidas serão sanadas.

Criado 19 de novembro de 2011
Ultima resposta 20 de nov. de 2011
Respostas 8
Participantes 2