Ir ao conteúdo

Posts recomendados

Postado

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

 

Postado

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
Postado

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 :)

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...