Avrei un dubbio relativo alla implementazione fatta dal manuale rispetto a quella fatta da me.
L'esercizio in questione chiede di stampare per un determinato file le prime 10 righe alla pressione della lettera n sulla tastiera, una volta stampate le righe se si preme nuovamente la lettera n stampa le successive 10 e così via fino alla fine del file.
Ora, tralasciando tutto il resto del codice, il mio dubbio è relativo proprio a come il programma farebbe a capire, una volta stampate le prime 10 righe, che alla successiva pressione della lettera n deve stampare le successive 10 e non di nuovo le stesse.
Io ho sviluppato una mia soluzione che alla fine del post vi posterò e che funziona senza problemi ma non riesco davvero a capire come possa, la soluzione del manuale, funzionare.
Questa è la soluzione del manuale:
codice:
if (carattere.equals(NEXT_COMMAND)) {
for (int i = 0; fileScanner.hasNext() && i < numeroRighe; i++) {
System.out.println(fileScanner.nextLine());
}
}
la variabile "numeroRighe" è settata a 10 mentre la costante NEXT_COMMAND è settata a "n".
fileScanner è definito in questo modo: Scanner fileScanner = new Scanner(file);
file rappresenta il file da scansionare.
Quello che non capisco è come faccia fileScanner, una volta scandito le prime 10 righe, e non tornare a scandire di nuovo le prime 10 ma a passare alle successive 10.
Comunque questa è la mia soluzione:
codice:
if (lettera.equals("n") || lettera.equals("N")) {
if (lista1.size()<=10) {
listaTemp.addAll(lista1.subList(0, lista1.size()));
Iterator<String> iteratore = listaTemp.iterator();
while(iteratore.hasNext()) {
String riga = iteratore.next();
System.out.println(riga);
}
lista1.subList(0, lista1.size()).clear();
System.out.println("stampate tutte le righe");
}
else if(lista1.size()>10) {
listaTemp.addAll(lista1.subList(0, 10));
Iterator<String> iteratore = listaTemp.iterator();
while(iteratore.hasNext()) {
String riga = iteratore.next();
System.out.println(riga);
}
lista1.subList(0, 10).clear();
}
}
La differenza in termini di compattezza del codice è imbarazzante effettivamente però non sono riuscito a svolgerlo diversamente.