Ordenando ArrayList [Collections.sort()]

4 respostas
jeias

Bom dia, estou com um pequeno problema na hora de ordenar e imprimir um ArrayList.

class Pessoa implements Comparable<Pessoa>{
		String nome, score;

		public String getNome() {
			return nome;
		}

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

		public String getScore() {
			return score;
		}

		public void setScore(String score) {
			this.score = score;
		}
		
		
		public boolean equals(Pessoa p){
			return score.equals(p.score);
		}

		@Override
		public int compareTo(Pessoa p) {
			return score.compareTo(p.score);
		}
		
		
	}
	private void imprimir()throws IOException{
		ArrayList<Pessoa> array = new ArrayList<Pessoa>();
		FileReader reader = new FileReader(new File("output.txt"));
		BufferedReader leitor = new BufferedReader(reader);
		String linha = null;
		while((linha != leitor.readLine())){
			Pessoa  p = new Pessoa(); 
			
		
			p.setNome(leitor.readLine());
			p.setScore( leitor.readLine());
			
			array.add(p);
			
		}
		leitor.close();
		reader.close();
		
		Collections.sort(array);
		String mostra="";
		// carregando a string para imprimir
		
		for(Pessoa i: array){
		
			mostra = mostra + i.nome+"         "+i.score+"\n";}
		
		JOptionPane.showMessageDialog(null,mostra);

	}
O erro é o seguinte:

Exception in thread main java.lang.NullPointerException

at java.lang.String.compareTo(Unknown Source)

at snake2.Ranking$Pessoa.compareTo(Ranking.java:47)

at snake2.Ranking$Pessoa.compareTo(Ranking.java:1)

at java.util.Arrays.mergeSort(Unknown Source)

at java.util.Arrays.sort(Unknown Source)

at java.util.Collections.sort(Unknown Source)

at snake2.Ranking.imprimir(Ranking.java:80)

at snake2.Ranking.main(Ranking.java:100)

No bloco de notas onde salvo os nomes e scores(output.txt), estão todos certos. O que penso que seja o problema é na hora de add no arraylist ou na hora de ordenar.
Agradeço desde já.

4 Respostas

F

Você está lendo a linha 3x. Você deve usar o conteudo da variável linha. Toda vez que vc executa leitor.readLine() o arquivo pula para a proxima linha.

Abraço,

Fred

jeias:
Bom dia, estou com um pequeno problema na hora de ordenar e imprimir um ArrayList.

class Pessoa implements Comparable<Pessoa>{
		String nome, score;

		public String getNome() {
			return nome;
		}

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

		public String getScore() {
			return score;
		}

		public void setScore(String score) {
			this.score = score;
		}
		
		
		public boolean equals(Pessoa p){
			return score.equals(p.score);
		}

		@Override
		public int compareTo(Pessoa p) {
			return score.compareTo(p.score);
		}
		
		
	}
	private void imprimir()throws IOException{
		ArrayList<Pessoa> array = new ArrayList<Pessoa>();
		FileReader reader = new FileReader(new File("output.txt"));
		BufferedReader leitor = new BufferedReader(reader);
		String linha = null;
		while(([b]linha != leitor.readLine()[/b])){
			Pessoa  p = new Pessoa(); 
			
		
			p.setNome([b]leitor.readLine()[/b]);
			p.setScore([b] leitor.readLine()[/b]);
			
			array.add(p);
			
		}
		leitor.close();
		reader.close();
		
		Collections.sort(array);
		String mostra="";
		// carregando a string para imprimir
		
		for(Pessoa i: array){
		
			mostra = mostra + i.nome+"         "+i.score+"\n";}
		
		JOptionPane.showMessageDialog(null,mostra);

	}
O erro é o seguinte:

Exception in thread main java.lang.NullPointerException

at java.lang.String.compareTo(Unknown Source)

at snake2.Ranking$Pessoa.compareTo(Ranking.java:47)

at snake2.Ranking$Pessoa.compareTo(Ranking.java:1)

at java.util.Arrays.mergeSort(Unknown Source)

at java.util.Arrays.sort(Unknown Source)

at java.util.Collections.sort(Unknown Source)

at snake2.Ranking.imprimir(Ranking.java:80)

at snake2.Ranking.main(Ranking.java:100)

No bloco de notas onde salvo os nomes e scores(output.txt), estão todos certos. O que penso que seja o problema é na hora de add no arraylist ou na hora de ordenar.
Agradeço desde já.

jeias

fre_d:
Você está lendo a linha 3x. Você deve usar o conteudo da variável linha. Toda vez que vc executa leitor.readLine() o arquivo pula para a proxima linha.

Abraço,

Fred

Não intendi Fred ;s

nel

Oi,

preste atenção no seu laço de repetição (while):

while((linha != leitor.readLine())){   
            Pessoa  p = new Pessoa();   
               
           
            p.setNome(leitor.readLine());   
            p.setScore( leitor.readLine());   
               
            array.add(p);   
               
        }

O que ele tem de errado?
Viu? Não? Então vou lhe dizer. Você já executa um readLine() como condição do While, concorda? Dentro dele, você executa mais duas vezes estes método, para pegar o nome e depois o score. Não deve ser feito dessa forma. Você precisa ter definido como está o arquivo que está lendo para saber como trata-lo em seu while, mas dessa forma, com certeza vai gerar erro.

Abraços.

lucasportela
nel:
Oi,

preste atenção no seu laço de repetição (while):

while((linha != leitor.readLine())){   
            Pessoa  p = new Pessoa();   
               
           
            p.setNome(leitor.readLine());   
            p.setScore( leitor.readLine());   
               
            array.add(p);   
               
        }

O que ele tem de errado?
Viu? Não? Então vou lhe dizer. Você já executa um readLine() como condição do While, concorda? Dentro dele, você executa mais duas vezes estes método, para pegar o nome e depois o score. Não deve ser feito dessa forma. Você precisa ter definido como está o arquivo que está lendo para saber como trata-lo em seu while, mas dessa forma, com certeza vai gerar erro.

Abraços.

O que o nel disse é que da forma como você está fazendo, estava lendo 3 linhas a cada iteração. Abaixo vai um exemplo do que o nel explicou
while((linha = leitor.readLine()) != null){   
            Pessoa  p = new Pessoa();   
           // Substring da linha onde contém o nome
            p.setNome(linha.substring(0,20));   
           // Substring da linha onde contém o score
            p.setScore(linha.substring(20,25));   
               
            array.add(p);   
               
}
Criado 19 de setembro de 2011
Ultima resposta 19 de set. de 2011
Respostas 4
Participantes 4