Problema com conteudo de arraylist[Resolvido]

3 respostas
P
oi, estou com um problema no meu arraylist tipo ao inves dele ir adicionando itens e aumentar o seu tamanho ele permanece com size 6 e sobreescreve os elementos assim o conteudo final dele é só os ultimos 6 modulos inseridos no mesmo!E eu só percebi este problema pq preciso adicionar o conteudo do arraylist na tela. Meu codigo é o seguinte
HashMap<String, ArrayList<Integer>> mapaDisciplina = new HashMap<String, ArrayList<Integer>>();    
	ArrayList<String> listaDisciplinas = new ArrayList<String>(); 
....
resultado = comando.executeQuery("select Id_disciplina,modulo from disc_modulo where ensino='"+1+"'");//order by Id_disciplina
								while (resultado.next())
								{ 
									String disciplina = resultado.getString(1);//exemplo  
									ArrayList<Integer> listaModulos = mapaDisciplina.get(disciplina);  
									  
									if (listaModulos == null) {  
									    listaModulos = new ArrayList<Integer>();  
									    listaDisciplinas.add(disciplina);   
									    mapaDisciplina.put(disciplina, listaModulos);  
									    
									}  
									int numeroDoModulo = resultado.getInt(2);  
									if (numeroDoModulo > listaModulos.size()) {  
								       int moduloAnterior = numeroDoModulo;  
								        listaModulos.add(numeroDoModulo);  
								        String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								       ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);  
								      Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								    //tinha colocado um system aqui e o tamanho do arraylist ia aumentando conforme a
//inserção de dados mas quando chega no 6 para de aumentar e começa a sobreescrever
									} 
								}
podem me ajudar a encontrar o erro no codigo?^ obrigada :)

3 Respostas

visola

Paty, não entendi o porque do IF na linha 17. Acho que você deveria simplesmente adicionar o número do módulo no ArrayList e pronto. Qualquer outro processamento poderia ser feito depois do WHILE.

Se a intenção era evitar duplicá-lo (Por que estariam duplicados no banco?) então seria melhor usar um TreeSet ao invés de um ArrayList, com isso já sairiam ordenados e não repetidos.

Mas se quiser continuar com o ArrayList, pode usar o método “contains” para verificar se alguma coisa já foi adicionada na lista. Algo como o seguinte:

if (! listaModulos.contains(numeroDoModulo) ) {
    // continua aqui
}
P
ah acho que eu fiz algo errado pois continua aparecendo só os seis modulos na tela. fia assim
int numeroDoModulo = resultado.getInt(2);//exemplo  
									if (! listaModulos.contains(numeroDoModulo) ) {  
								       int moduloAnterior = numeroDoModulo;  
								        listaModulos.add(numeroDoModulo);  
								        String[] arrayDeDisciplinas = listaDisciplinas.toArray(new String[0]);  
								        System.out.println("Adicionou:<" + disciplina + "><" + numeroDoModulo + ">");  
								        ArrayList<Integer> listaDeModulos = mapaDisciplina.get(arrayDeDisciplinas[0]);  
								        //Converter para array  
								        Integer[] arrayDeModulos = listaDeModulos.toArray(new Integer[0]);  
								        System.out.println("Lista de modulos agora:<" + Arrays.toString(arrayDeModulos) + ">");  
								  
									}
:( a tela ficou conforme o print em anexo obrigada pela ajuda
P

Obrigada pela ajuda este problema foi resolvido no topico:
http://www.guj.com.br/java/236975-ajuda-para-inserir-itens-do-arraylist-na-tela/4
:slight_smile:

Criado 7 de abril de 2011
Ultima resposta 7 de abr. de 2011
Respostas 3
Participantes 2