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ì:
Ma ho un problaema in fase di esecuzione durate la chiamata a dequeue(): readLine() mi ritorna null invece di ritornare la prossima stringa letta.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; } //-------------------------------------------------------------------------------------- }
Come mai?
Come posso risolvere questo problema??
Un grazie enorme a tutti!!

 
			
			 
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando