Ciao a tutti,
La situazione è semplice: viene richiesta l'implementazione di una classe e il relativo main "di prova".
Testo esercizio
Come da titolo, riscontro un problema nella lettura di informazioni da file, essenzialmente in "due versioni" differenti:
La prima variante si verifica utilizzando StringTokenizer. Ricevo un output sbagliato (stessi risultati raddoppiati) seguito da un NoSuchElementException
La seconda variante si verifica nel momento in cui uso Scanner con gli opportuni token, il cui output finale è un NoSuchElementException
Il file in allegato riguarda l'input in1.txt
Codice classe Evento
codice:
public class Evento implements Comparable <Evento>{ private int giorno;
private int oraInizio;
private int durata;
private int oraFine;
public Evento(int g, int o,int d){
this.giorno = g;
this.oraInizio = o;
this.durata = d;
this.oraFine = this.oraInizio + this.durata;
}
public int compareTo(Evento o){
String questo = this.giorno + " " +this.oraInizio;
String altro = o.giorno + " " + this.oraInizio;
int cmp = questo.compareTo(altro);
return cmp;
}
public int getInizioOra(){
return this.oraInizio;
}
public int getGiorno(){
return this.giorno;
}
public int getDurata(){
return this.durata;
}
public int getFine(){
return this.oraInizio + this.durata;
}
public boolean equals(Object o){
if (o instanceof Evento){
Evento e = (Evento)o;
return this.giorno == e.giorno && this.oraFine == e.oraInizio - 1;
}else{
return false;
}
}
}
Codice classe Esercizio1
codice:
import java.util.*;import java.io.*;
import java.lang.Throwable;
public class Esercizio1{
public static void main (String [] args)throws FileNotFoundException{
List <Evento> listaEventi = new ArrayList <Evento>();
Scanner letturaFile = new Scanner (new File("in1.txt"));
String casi = " ";
while (letturaFile.hasNextLine()){
String s = letturaFile.nextLine();
// System.out.println(letturaile);
Scanner tknzer = new Scanner (s);
tknzer.useDelimiter(",");
String c = tknzer.nextLine();
int giorno = tknzer.nextInt();
int oraInizio = tknzer.nextInt();
int durata = tknzer.nextInt();
//System.out.println(giorno);
switch (c){
case "P": Evento e = new Evento (giorno,oraInizio,durata);
listaEventi.add(e);
break;
case "S": Collections.sort(listaEventi);
break;
}
for (Evento x : listaEventi){
System.out.println("Giorno "+ x.getGiorno()+ ", dalle " + x.getInizioOra()+ " alle " +x.getFine());
//System.out.print(letturaFile.next());
}
}
}
}
Ho inserito il foreach finale per testare il (mal)riuscito inserimento degli elementi nella list.
Grazie in anticipo per le risposte e scusate la banalità della richiesta (e l'eventuale poca chiarezza)