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.
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]);
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
int inteiro = Integer.parseInt(guardarDados[0]); //no seu caso o tipo inteiro estará na 1º posição da array
String nome = 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.
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
public static void quick_sort(int []v,int ini, int fim){
int meio;
if(ini<fim){
meio = partition(v,ini,fim);
quick_sort(v,ini,meio);
quick_sort(v,meio+1,fim);
}
}
public static int partition(int []v, int ini, int fim){
int pivo, topo,i;
pivo = v[ini];
topo = ini;
for(i=ini+1;i<fim;i++){
if(v[i]<pivo){
v[topo]=v[i];
v[i]=v[topo+1];
topo++;
}
}
v[topo]=pivo;
return topo;
}
…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.
package ultilitarios;
public class quick {
public static void quick_srt(int array[],int low, int n){
int lo = low;
int hi = n;
if (lo >= n) {
return;
}
int mid = array[(lo + hi) / 2];
while (lo < hi) {
while (lo<hi && array[lo] < mid) {
lo++;
}
while (lo<hi && array[hi] > mid) {
hi--;
}
if (lo < hi) {
int T = array[lo];
array[lo] = array[hi];
array[hi] = T;
}
}
if (hi < lo) {
int T = hi;
hi = lo;
lo = T;
}
quick_srt(array, low, lo);
quick_srt(array, lo == low ? lo+1 : lo, n);
}
}
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.
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class home {
public static void main(String[] args) {
//Duas listas para guardar os numeros e textos separadamente
ArrayList<Integer> numeros = new ArrayList<Integer>();
ArrayList<String> textos = new ArrayList<String>();
try {
BufferedReader leitor = new BufferedReader(
new FileReader("entrada-ord-50000.txt"));
String linha = leitor.readLine();
while (linha != null) {
String guardarDados[] = linha.split(";");
numeros.add(Integer.parseInt(guardarDados[0]));
textos.add(guardarDados[1]);
linha = leitor.readLine();
}
leitor.close();
} catch (FileNotFoundException ex) {
JOptionPane.showMessageDialog(null, "Erro:" + ex);
} catch (IOException ex) {
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 = new int[numeros.size()];
String[] t = new String[numeros.size()];
for(int i=0; i<numeros.size(); i++){
v[i] = numeros.get(i).intValue();
t[i] = textos.get(i);
}
//Vetores carregados passar para o quicksort
quick_sort(v, 0, numeros.size(), t);
//Os vetores v e t estao ordenados pelo valor de v
//Agora é só imprimir
for(int i=0; i<numeros.size(); i++){
System.out.println(v[i] + ";" + t[i]);
}
}
public static void quick_sort(int[] v, int ini, int fim, String[] t) {
int meio;
if (ini < fim) {
meio = partition(v, ini, fim, t);
quick_sort(v, ini, meio, t);
quick_sort(v, meio + 1, fim, t);
}
}
public static int partition(int[] v, int ini, int fim, String[] t) {
int pivo, topo, i;
String pivoS;
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;
return topo;
}
}