Bom dia galera tenho que desenvolver um programa em java com leitura de arquivo mas tenho que pegar este valores e ordena-los com algumas funções quicksort e seleção mas o arquivo vem como String como faço para transformar o arquivo String em inteiro o mandar para a função, lembrando que já utilizei ex: Integer x = Interger.parseInt(linha); a leitura do arquivo já esta pronto falta agora converter o arquivo e mandar pra função sendo que o mesmo esta em um arquivo .txt como as seguintes informações.
23;oudre
12;hhsk
1;ieEaml
100;Yhdna
E deve ser ordenado e sair da seguinte maneira:
1;ieEaml
12;hhsk
23;oudre
100;Yhdna
Voce ganhou um premio de melhor explicação de topico. kkkk
Transformar um arquivo em inteiro?!?!?!??!?!
Tá, vc leu o arquivo texto, cada linha veio na forma de uma String
Beleza, agora você tem que separar as partes da linha pelo ponto-e-virgula
pode usar indexOf(";") para achar a posicao na String e depois
pode usar substring para separar as partes. Pode usar StringTokenizer
também, é bom e já coloca tudo em um array.
Separada a primeira parte e a segunda, converta a primeira em inteiro
e coloque esse conjunto num objeto e o grave numa list.
Em seguida pode aplicar ordenação e tudo mais.
I
Ivan_Alves
Geralmente uso o método split da String por exemplo
String []guardarDados = suaLinhaLida.split(";"); //método split separa String de acordo com parametro especifico te retornando uma Array
//depois converto os dados
int inteiro = Integer.parseInt(guardarDados[0]); //no seu caso o tipo inteiro estará na 1º posição da array
String nome = guardarDados[1]);
flw!!
R
rekcah
publicstaticvoidmain(String[]args){try{BufferedReaderleitor=newBufferedReader(newFileReader("arquivo.txt"));Stringlinha=leitor.readLine();while(linha!=null){//processar a linha lidaSystem.out.println(linha);linha=leitor.readLine();}leitor.close();}catch(FileNotFoundExceptionex){JOptionPane.showMessageDialog(null,"Erro:"+ex);//System.out.println("Erro " + ex);}catch(IOExceptionex){JOptionPane.showMessageDialog(null,"Erro:"+ex);//System.out.println("Erro " + ex);}}
// Esta e a parte de código já implementada no console tem a seguinte saída
23;abcd
12;zyxw
49;pqrs
8;wzxt
31;optrs
tenho que desmembrar os numero das letras é chamar as funções
Não sei se seria certo utilizar o substring pois pode existir variáveis que sejam maiores ou menores
ex: 765;jhdt
12;gtd
1;ased
J
JoaoBluSCBR
Você não lê as respostas? Ou não as entende?
O Ivan te mostrou a sequencia.
Faça um Split pelo ponto-e-virgula e você terá os valores separados sem precisar usar substring:
String[]guardarDados=linha.split(";");//método split separa String de acordo com parametro especifico te retornando uma Array //depois converto os dados intinteiro=Integer.parseInt(guardarDados[0]);//no seu caso o tipo inteiro estará na 1º posição da array Stringnome=guardarDados[1]);
Coloca isso dentro do teu while, depois de ler a linha.
E na sequencia usa esse inteiro e o nome para guardar as informacoes ou fazer algo com elas.
R
rekcah
…Separada a primeira parte e a segunda, converta a primeira em inteiro
e coloque esse conjunto num objeto e o grave numa list.
Em seguida pode aplicar ordenação e tudo mais.
como eu faço este processo aqui ?
J
JoaoBluSCBR
Que tipo de lista você vai usar?
J
JoaoBluSCBR
QuickSort trabalho com vetores, então vc deveria criar um array
com os inteiros dos textos. e usar o quicksort para ordenar este array.
Depois aplicar este array ordenado para mostrar os nomes respectivos
…QuickSort trabalho com vetores, então vc deveria criar um array
com os inteiros dos textos. e usar o quicksort para ordenar este array.
Depois aplicar este array ordenado para mostrar os nomes respectivos …
A parte da leitura esta ok só não estou conseguindo colocar os dados em um vetor e trabalhar com os valores para mandar para função de ordenação sendo que depois precisarei da String ordenada.
J
JoaoBluSCBR
Poste o código do que vc já fez e tentamos te ajudar.
Colocando num vetor.
R
rekcah
importjava.awt.List;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.regex.Pattern;importjavax.swing.JOptionPane;importultilitarios.*;importultilitarios.QuickSort;importbr.com.funcoes.*;importbr.com.entrada.*;publicclasshome{privatestaticStringvetor;quiksortquick=newquiksort();// Metodos do programa //// // Fim dos Métodos //publicstaticvoidmain(String[]args){// TODO Auto-generated method stubintinteiro;try{BufferedReaderleitor=newBufferedReader(newFileReader("entrada-ord-50000.txt"));ArrayList<String>Dados=newArrayList<String>();Stringlinha=leitor.readLine();while(linha!=null){Dados.add(linha);StringguardarDados[]=linha.split(";");inteiro=Integer.parseInt(guardarDados[0]);linha=leitor.readLine();}System.out.println("Vetor:"+Dados);leitor.close();}catch(FileNotFoundExceptionex){JOptionPane.showMessageDialog(null,"Erro:"+ex);}catch(IOExceptionex){JOptionPane.showMessageDialog(null,"Erro:"+ex);}}}Seguecódigo.
J
JoaoBluSCBR
Voce poderia postar tua classe com o QuickSort para que eu possa ver parametros dela.
Nao tenho muito tempo para esperar a tua boa vontade, entao fiz algo
usando um quick_sort que eu já tinha postado aqui anteriormente apenas
adaptando ele. Nao pude testar por que nao tenho seu arquivo de texto
e tbm nao tava com vontade de inventar um.
importjava.io.BufferedReader;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;importjava.util.ArrayList;importjavax.swing.JOptionPane;publicclasshome{publicstaticvoidmain(String[]args){//Duas listas para guardar os numeros e textos separadamenteArrayList<Integer>numeros=newArrayList<Integer>();ArrayList<String>textos=newArrayList<String>();try{BufferedReaderleitor=newBufferedReader(newFileReader("entrada-ord-50000.txt"));Stringlinha=leitor.readLine();while(linha!=null){StringguardarDados[]=linha.split(";");numeros.add(Integer.parseInt(guardarDados[0]));textos.add(guardarDados[1]);linha=leitor.readLine();}leitor.close();}catch(FileNotFoundExceptionex){JOptionPane.showMessageDialog(null,"Erro:"+ex);}catch(IOExceptionex){JOptionPane.showMessageDialog(null,"Erro:"+ex);}//Chegou até aqui é preciso ordenar pelos numeros//Mas o quicksort precisa de um vetor, não uma Lista.//Entao o jeito é criar um vetor e passar os dados da//lista para ele.int[]v=newint[numeros.size()];String[]t=newString[numeros.size()];for(inti=0;i<numeros.size();i++){v[i]=numeros.get(i).intValue();t[i]=textos.get(i);}//Vetores carregados passar para o quicksortquick_sort(v,0,numeros.size(),t);//Os vetores v e t estao ordenados pelo valor de v//Agora é só imprimirfor(inti=0;i<numeros.size();i++){System.out.println(v[i]+";"+t[i]);}}publicstaticvoidquick_sort(int[]v,intini,intfim,String[]t){intmeio;if(ini<fim){meio=partition(v,ini,fim,t);quick_sort(v,ini,meio,t);quick_sort(v,meio+1,fim,t);}}publicstaticintpartition(int[]v,intini,intfim,String[]t){intpivo,topo,i;StringpivoS;pivo=v[ini];pivoS=t[ini];topo=ini;for(i=ini+1;i<fim;i++){if(v[i]<pivo){v[topo]=v[i];t[topo]=t[i];v[i]=v[topo+1];t[i]=t[topo+1];topo++;}}v[topo]=pivo;t[topo]=pivoS;returntopo;}}
J
JoaoBluSCBR
Bem, meu quick é praticamente o mesmo que o teu.
Eu apenas incluí o array de Strings junto para que
ficasse na ordem dos números.
Faça um teste, eu não pude testar.
J
JoaoBluSCBR
Fiz um teste e havia um erro, um -1 na linha que ativa o quicksort, o correto é:
//Vetores carregados passar para o quicksortquick_sort(v,0,numeros.size(),t);