|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
[Java]gestione input e StringTokenizer
Ciao!
Probabilmente è l'ora tarda ( :sisi: ), ma mi stanno venendo dubbi atroci sulla gestione dell'input.. Esempio pratico: sto facendo un esercizio dove chiede di creare un archivio di patenti di guida;secondo la consegna, il costruttore (di cui ho solo la firma) " inizializza l'archivio con i dati prelevati da un file il cui nome e' passato come parametro e dove le patenti di guida sono riportate una per riga con il seguente formato: numero:nome:punteggio " Io (sperando di aver capito bene) ho scritto così: Codice:
public M(String file) throws IOException
{
archivio= new Coppia[1];
dim = 0;
FileReader r = new FileReader (file);
BufferedReader reader = new BufferedReader(r);
while (reader.readLine() != null)
{
String line = reader.readLine();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens())
{
String num = tokenizer.nextToken(":");
String nome = tokenizer.nextToken(":");
int punt = Integer.parseInt(tokenizer.nextToken("\n"));
aggiungi(num, nome, punt);
}
}
reader.close();
}
Grazie mille in anticipo
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Perché non fai qualche stampa a video per vedere cosa viene messo dentro le variabili? Sempre che non hai un debugger che sarebbe molto meglio.
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2007
Città: Roma
Messaggi: 93
|
non ne sono sicuro....
....ma prova un po' così!? Codice:
public M(String file) throws IOException
{
archivio= new Coppia[1];
dim = 0;
FileReader r = new FileReader (file);
BufferedReader reader = new BufferedReader(r);
while (reader.readLine() != null)
{
String line = reader.readLine();
StringTokenizer tokenizer = new StringTokenizer(line, ":");
while (tokenizer.hasMoreTokens())
{
String num = tokenizer.nextToken();
String nome = tokenizer.nextToken();
int punt = Integer.parseInt(tokenizer.nextToken());
aggiungi(num, nome, punt);
}
}
reader.close();
}
__________________
Più ti avvicini alla luce, più la tua ombra diventa grande (Kingdom Hearts - Walt Disney e Squaresoft, ma la mano è della Squaresoft) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Eccomi..ho appena provato a creare una classe di prova, ma mi dà questo errore, anche dopo aver modificato la classe come consigliato da Dark Phoenix..
C:\...>java ProvaPatente patenti.txt Exception in thread "main" java.lang.NumberFormatException: For input string: "34CD56" at java.lang.NumberFormatException.forInputString(NumberFormatException. java:48) at java.lang.Integer.parseInt(Integer.java:456) at java.lang.Integer.parseInt(Integer.java:497) at M.aggiungi(M.java:37) at M.<init>(M.java:26) at ProvaPatente.main(ProvaPatente.java:8) non capisco dove sto sbagliando.. Questo è il contenuto di patenti.txt: 12AB34:Antonio Verdi:20 34CD56:Berto Rossi:20 56EF78:Carlo Bianchi:20
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Modena
Messaggi: 592
|
prova a postare il metodo "aggiungi", secondo me il problema è lì!
Il compilatore ti sta dicendo che non riesce a convertire "34CD56" in Integer, evidentemente nel metodo aggiungi tu fai un'operazione del genere sul primo parametro che però è una stringa e non un intero (o stringa che rappresenti un intero). Ciauz |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Quote:
mamma mia, hai ragione..ma cavolo, si può chiamare "numero" una variabile che non è un numero?! io già sono torda di mio, se poi ci si mettono di impegno per farmi sbagliare comunque ora ho modificato, ma ancora non va.. Adesso mi dice: C:\...>java ProvaPatente patenti.txt Exception in thread "main" java.lang.NullPointerException at java.util.StringTokenizer.<init>(StringTokenizer.java:182) at java.util.StringTokenizer.<init>(StringTokenizer.java:204) at M.<init>(M.java:20) at ProvaPatente.main(ProvaPatente.java:8)
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: May 2007
Città: Roma
Messaggi: 93
|
Beh ora è facile....
Il buon vecchio nullpointer exception a quella liga lì.... Quote:
__________________
Più ti avvicini alla luce, più la tua ombra diventa grande (Kingdom Hearts - Walt Disney e Squaresoft, ma la mano è della Squaresoft) |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Quote:
trovato, grazie comunque!Tornando in tema..per la gestione dell'input quali sono le modalità più usate? Io conosco Scanner (e in quel caso se devo dargli in lettura un file, devo inserirlo con il <, giusto? ) e FileReader + BufferedReader ( e qua invece passo il nome del file come parametro del main, no?)..ho detto cavolate? E invece per creare un file di output cosa si usa di solito??
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Ovunque
Messaggi: 5804
|
Io preferisco usare gli stream. Utilizzando FileInputStream ho sempre ottenuto il risultato sperato.
Devi incapsulare gli stream in modo da ottenere una lettura bufferizzata, ovvero: Codice:
File f = new File(pathdelfile); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f))); Codice:
String input = br.readLine();
__________________
:: Le mie trattative :: LOL >> http://www.hwupgrade.it/forum/showth...9#post31430289 |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: May 2007
Città: Roma
Messaggi: 93
|
Guarda se devi trattare solo file di "caratteri" puoi utilizzare FileReader.
P.S. @ABCcletta: L' "imbussulamento" in InputStreamReader volendo lo puoi togliere
__________________
Più ti avvicini alla luce, più la tua ombra diventa grande (Kingdom Hearts - Walt Disney e Squaresoft, ma la mano è della Squaresoft) |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Sep 2004
Città: Ovunque
Messaggi: 5804
|
Quote:
EDIT: Infatti non va. Forse volevi intendere qualche altra cosa?
__________________
:: Le mie trattative :: LOL >> http://www.hwupgrade.it/forum/showth...9#post31430289 Ultima modifica di ABCcletta : 10-12-2007 alle 03:08. |
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: May 2007
Città: Roma
Messaggi: 93
|
Si mi sono espresso malissimo....
in pratica volevo dire che così è più snello... Codice:
File f = new File(pathdelfile); BufferedReader br = new BufferedReader(new FileReader(f));
__________________
Più ti avvicini alla luce, più la tua ombra diventa grande (Kingdom Hearts - Walt Disney e Squaresoft, ma la mano è della Squaresoft) |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Sep 2004
Città: Ovunque
Messaggi: 5804
|
Quote:
Ma preferisco avere a che fare con gli stream
__________________
:: Le mie trattative :: LOL >> http://www.hwupgrade.it/forum/showth...9#post31430289 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:47.












trovato, grazie comunque!








