Salve,
il mio problema riguarda una mia implementazione di una queue.
La mia queue memorizza i dati (stringhe) su un file di testo queue.txt e utilizza 4 metodi: costruttore,enqueue,dequeue e contains:il primo ovviamente crea il file "coda" e inizializza gli stream di input output, il secondo restituisce la stringa in testa alla coda e il terzo mi dice se c'è nella coda una certa stringa.
Ovviamente la dequeue non rimuove la stringa che ritorna,ma avevo pensato di sfruttare le proprietà dello stream di input:la stringa in testa alla coda sarà la prossima stringa che verrà letta,e ciò comporta che lo stream non debba essere chiuso tra una chiamata e l'altra del metodo in modo che possa fungere da iteratore(tale stream deve essere aperto alla creazione della coda e chiuso solo quando la coda non servirà più).
Io avevo pensato di implementarla così:
codice:
import java.io.*;
public class UserQueue {
private FileOutputStream fw;
private PrintStream w;
private FileInputStream fr1;
private BufferedReader r1;
//--------------------------------------------------------------------------------------
public UserQueue(){
try{
fw=new FileOutputStream("queue.txt",true);
w=new PrintStream(fw);
fr1=new FileInputStream("queue.txt");
r1=new BufferedReader(new InputStreamReader(fr1));
}catch(IOException e){ System.out.println("UserQueue:errore IO!");
System.exit(1); }
}
//--------------------------------------------------------------------------------------
public void enqueue(String nome,int livello){
w.append(nome+" "+livello+";\n");
}
//--------------------------------------------------------------------------------------
public String dequeue(){
String aux=null;
int i,j;
if(r1==null) System.out.println("r1 null");
try{
aux=r1.readLine();
if(aux==null) System.out.println("aux null");
}catch(IOException e){ System.out.println("dequeue:errore IO!");
System.exit(1); }
if(aux!=null){
if((i=aux.indexOf(" "))==-1) { System.out.println("dequeue:errore stringa!");
System.exit(1); }
if((j=aux.indexOf(";"))==-1) { System.out.println("dequeue:errore stringa!");
System.exit(1); }
return aux;
}
else return null;
}
//--------------------------------------------------------------------------------------
public boolean contains(String nome){
String aux;
int i;
try{
FileInputStream fr2=new FileInputStream("queue.txt");
BufferedReader r2 = new BufferedReader(new InputStreamReader(fr2));
while((aux=r2.readLine())!=null){
if((i=aux.indexOf(" "))==-1) { System.out.println("dequeue:errore stringa!");
System.exit(1); }
if(nome.equals(aux.substring(0,i))) return true;
}
}catch(IOException e){ System.out.println("contains:errore IO!");
System.exit(1); }
return false;
}
//--------------------------------------------------------------------------------------
}
Ma ho un problaema in fase di esecuzione durate la chiamata a dequeue(): readLine() mi ritorna null invece di ritornare la prossima stringa letta.
Come mai?
Come posso risolvere questo problema??
Un grazie enorme a tutti!!