aduri
17-08-2006, 15:11
Come vi avevo anticipato nell'altro post eccomi di nuova qua'.
Questo codice da me sviluppato a livello didattico sul sort di un array e sulla ricerca binaria e' andato a buon fine caricando l'array direttamente da codice.
Se io volessi caricare da file composto da 2 campi (uno stringa ed un intero) separati da tabulazione (\t) e 82 records (dati4.txt) come posso fare?
Chiaramente devo sempre poter gestire sort e ricerca.
Io ho provato (codice commentato) ma sono riuscito a fare apparire il primo record dopodiche' dava errore; Allego il codice:
Codice:
import java.util.*;
import java.io.*;
import javax.swing.JOptionPane;
class MyFile {
public int dim;
public String nome;
public MyFile (int dim, String nome) {
this.dim = dim;
this.nome = nome;
}
}
class KeyDim implements Comparator {
public int compare (Object MyFile1, Object MyFile2) {
int dim1 = ((MyFile) MyFile1).dim;
int dim2 = ((MyFile) MyFile2).dim;
return (dim1 < dim2 ? -1 : (dim1 == dim2 ? 0 : 1));
}
}
class KeyNome implements Comparator {
public int compare (Object MyFile1, Object MyFile2) {
String nome1 = ((MyFile) MyFile1).nome;
String nome2 = ((MyFile) MyFile2).nome;
return nome1.compareTo (nome2);
}
public static void main(String[] args) throws
IOException{
KeyDim keydim = new KeyDim();
KeyNome keyNome = new KeyNome();
//Carico file da dati4.txt
// String nomeFile=JOptionPane.showInputDialog("Digita il nome del file da leggere");
//
// BufferedReader fileLettura;
// try
// {
// fileLettura = new BufferedReader(new FileReader(nomeFile));
// while(true)
// {
// String linea = fileLettura.readLine();
// if(linea==null)
// break;
// System.out.println(linea);
// }
// }
// catch (FileNotFoundException e)
// {
// System.out.println("Il file "+nomeFile + " non esiste o non puo' essere aperto");
// }
// catch (IOException e)
// {
// System.out.println("errore di lettura "+e);
// }
//
// System.exit(0);
//Carico file manualmente
MyFile[] a = new MyFile[8];
a[0] = new MyFile (12120, "Acrobat.exe");
a[1] = new MyFile (13152, "Quovadis.txt");
a[2] = new MyFile (13200, "execute.bat");
a[3] = new MyFile (13300, "revers.exe");
a[4] = new MyFile (13400, "equi.bat");
a[5] = new MyFile (13500, "ripple.exe");
a[6] = new MyFile (13600, "gong.mid");
a[7] = new MyFile (12119, "guida.doc");
System.out.println ("Array non ordinato: ");
for (int k = 0; k < a.length; k++)
System.out.println (a[k].dim + " " + a[k].nome);
System.out.println ("Array ordinato rispetto alla Dimensione: ");
Arrays.sort (a, keydim);
for (int k = 0; k < a.length; k++)
System.out.println (a[k].dim + " " + a[k].nome);
System.out.println ("Array ordinato rispetto al nome: ");
Arrays.sort (a, keyNome);
for (int k = 0; k < a.length; k++)
System.out.println (a[k].dim + " " + a[k].nome);
//Implemento la ricerca binaria per nome
System.out.println ("");
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print("Cerca file con nome: ");
String nomeCercato = in.readLine();
MyFile fileCercato = new MyFile(-1, nomeCercato);
int pos = Arrays.binarySearch (a, fileCercato, keyNome);
if (pos >= 0)
System.out.println ("File trovato (dopo averlo ordinato secondo nome) in posizione: " + pos);
else
System.out.println ("Nome file inesistente");
}
}
Questo codice da me sviluppato a livello didattico sul sort di un array e sulla ricerca binaria e' andato a buon fine caricando l'array direttamente da codice.
Se io volessi caricare da file composto da 2 campi (uno stringa ed un intero) separati da tabulazione (\t) e 82 records (dati4.txt) come posso fare?
Chiaramente devo sempre poter gestire sort e ricerca.
Io ho provato (codice commentato) ma sono riuscito a fare apparire il primo record dopodiche' dava errore; Allego il codice:
Codice:
import java.util.*;
import java.io.*;
import javax.swing.JOptionPane;
class MyFile {
public int dim;
public String nome;
public MyFile (int dim, String nome) {
this.dim = dim;
this.nome = nome;
}
}
class KeyDim implements Comparator {
public int compare (Object MyFile1, Object MyFile2) {
int dim1 = ((MyFile) MyFile1).dim;
int dim2 = ((MyFile) MyFile2).dim;
return (dim1 < dim2 ? -1 : (dim1 == dim2 ? 0 : 1));
}
}
class KeyNome implements Comparator {
public int compare (Object MyFile1, Object MyFile2) {
String nome1 = ((MyFile) MyFile1).nome;
String nome2 = ((MyFile) MyFile2).nome;
return nome1.compareTo (nome2);
}
public static void main(String[] args) throws
IOException{
KeyDim keydim = new KeyDim();
KeyNome keyNome = new KeyNome();
//Carico file da dati4.txt
// String nomeFile=JOptionPane.showInputDialog("Digita il nome del file da leggere");
//
// BufferedReader fileLettura;
// try
// {
// fileLettura = new BufferedReader(new FileReader(nomeFile));
// while(true)
// {
// String linea = fileLettura.readLine();
// if(linea==null)
// break;
// System.out.println(linea);
// }
// }
// catch (FileNotFoundException e)
// {
// System.out.println("Il file "+nomeFile + " non esiste o non puo' essere aperto");
// }
// catch (IOException e)
// {
// System.out.println("errore di lettura "+e);
// }
//
// System.exit(0);
//Carico file manualmente
MyFile[] a = new MyFile[8];
a[0] = new MyFile (12120, "Acrobat.exe");
a[1] = new MyFile (13152, "Quovadis.txt");
a[2] = new MyFile (13200, "execute.bat");
a[3] = new MyFile (13300, "revers.exe");
a[4] = new MyFile (13400, "equi.bat");
a[5] = new MyFile (13500, "ripple.exe");
a[6] = new MyFile (13600, "gong.mid");
a[7] = new MyFile (12119, "guida.doc");
System.out.println ("Array non ordinato: ");
for (int k = 0; k < a.length; k++)
System.out.println (a[k].dim + " " + a[k].nome);
System.out.println ("Array ordinato rispetto alla Dimensione: ");
Arrays.sort (a, keydim);
for (int k = 0; k < a.length; k++)
System.out.println (a[k].dim + " " + a[k].nome);
System.out.println ("Array ordinato rispetto al nome: ");
Arrays.sort (a, keyNome);
for (int k = 0; k < a.length; k++)
System.out.println (a[k].dim + " " + a[k].nome);
//Implemento la ricerca binaria per nome
System.out.println ("");
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print("Cerca file con nome: ");
String nomeCercato = in.readLine();
MyFile fileCercato = new MyFile(-1, nomeCercato);
int pos = Arrays.binarySearch (a, fileCercato, keyNome);
if (pos >= 0)
System.out.println ("File trovato (dopo averlo ordinato secondo nome) in posizione: " + pos);
else
System.out.println ("Nome file inesistente");
}
}