Erro com ponteiro

3 respostas
G

Estou com um problema. Tenho um mapa, que possui os multiplos de vários números que foram lidos em um arquivo.. os multiplos encontrados de 2 por exemplo, são armazenados em um Set.
O arquivo consulta me informar qual número vou consultar os multiplos.
Assim, na variável 'num' eu armazeno o número que irei procurar seus múltiplos. Armazenando lá, eu vou pegar os multiplos mapeados e colocá-los no Set 'multiplos', para usar o iterator e imprimir.
Onde está o comentário está o erro, está dando java.lang.NullPointerException. Deveria imprimir algum número, mesmo que fosse zero, porém dá pala. Alguém pode me ajudar?

public static void consulta(Map<Integer,Set<Integer>> mapa)throws Exception {
		Scanner consulta = new Scanner (new File("consulta.txt"));
		FileWriter saida = new FileWriter (new File("saida.txt"));
		
		int num;
		Set<Integer> multiplos = new HashSet<Integer>();
		Iterator<Integer> setIt = multiplos.iterator();
		
		for(int i = 0; consulta.hasNextLine() ; i++){
			
			num = Integer.parseInt(consulta.nextLine());
			multiplos = mapa.get(num);
			System.out.print(multiplos.size()); // erro
                        saida.write(num + ":");
			for(int j = 0; setIt.hasNext() ; j++){
				if(j + 1 == multiplos.size())
					saida.write(setIt.next());
				else
					saida.write(setIt.next() + ",");			
			}
			saida.write("\r\n");
		}
		saida.flush();
		saida.close();
	}

3 Respostas

sowyer

O que está acontecendo é essa linha:

multiplos = mapa.get(num);

Ela está atribuindo null a variável multiplos.

Ou seja, no mapa não existe nenhuma key com o valor ‘num’ .

G

Como posso tratar isso?

sowyer

Uma abordagem seria após esta linha, vc checa se o mapa múltiplos está nulo e dar um continue.

(! multiplos == null ) ? System.out.print(multiplos.size()) : continue

Mas depende mais do que vc pretende. Mas se for só pra mostrar, isso resolve.

Criado 4 de setembro de 2011
Ultima resposta 4 de set. de 2011
Respostas 3
Participantes 2