Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
PaulaFabiana

Java Como ordenar um arquivo txt

Recommended Posts

Minha dúvida é como criar uma função que pegue, um lista que esta de 1000 à 1 e transforme ela em crescente,porque ela esta em ordem decrescente

package vetorentrada;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.SortedSet;
import java.util.TreeSet;

public class VetorEntrada {

    
   public static void main(String[] args) {
        try {
                  
            // Le o arquivo
            FileReader ler = new FileReader("Vetordeentrada.txt");
            BufferedReader reader = new BufferedReader(ler);  
            String linha;
            while( (linha = reader.readLine()) != null ){
                System.out.println(linha);
            }

           
        } catch (IOException e) {
            e.printStackTrace();
        }
    
}}
a saída é assim
1000
...
2
1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Gostaria que fosse assim
1
2
....
1000

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem várias formas.
Acredito que a forma mais simples de você fazer isso é inserindo cada linha em uma Lista de Strings, como abaixo:

 

            String linha;
            List<String> lista = new ArrayList<String>()
            while( (linha = reader.readLine()) != null ){
                lista.add(linha);
            }

E depois disso utilizar algum algorítmo de ordenação para ordenar a lista. PORÉM: Se forem números, tome cuidado pos ele tende a ordenar Strings por caractere, o que resulta em algo como [1,10,11,12 ... 2,20,21 ...] ... Assim, teria que se atentar a essa situação ... Outra forma é utilizar a Biblioteca Collections ... 

Collections.sort(list, comparator);

Nesse caso, para evitar a Situação de ordem de números, você teria que implementar a Classe comparator para indicar o maior e menor.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Recomendo ler as linhas de texto e colocar numa árvore binária. Lê uma linha, insere-a na árvore binária.


Depois de lido o arquivo, percorre a árvore binária e a cada nó, escreve a linha. A árvore binária já coloca as linhas em ordem.

 

O argumento para comparação durante a inserção seria as colunas usadas para classificação.

 

O nó da árvore seria algo assim


 

class Nó { 
  String linha ;
  Nó maior ;
  Nó menor ;
}

Aí criaria uma classe árvore assim

 

classe Arvore {

     Nó raiz;

}

public void insere( Arvore raiz , String novalinha) {

     if (raiz == null) { 

            Nó novonó = new Nó();

            novonó.String = novalinha;

           novonó.maior = null;

          novonó.menor = null;

          raiz = novonó;

   } else { 

        int compara = strcmp(novalinha,raiz.linha);

       if (compara >=0)   { 

                   insere(raiz.maior, novalinha);

      } else {

             insere(raiz.menor, novalinha) ;

    }

}

public void percorre( Arvore raiz)  { 

        if (raiz == null) { 

              return;

        }

        percorre(raiz.menor);

       System.out.println( raiz.linha) ;

       percorre(raiz.maior);

}

 

 

adicionado 0 minutos depois
11 minutos atrás, psykotico disse:

Collections.sort(list, comparator);

Realmente, bem mais simples. parabens :)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×