Nel comporre il codice di un esercizio trovato su un forum da un utente in cerca di aiuto mi sono imbattuto in una (almeno apparente) anomalia di stampa...innanzitutto vi posto in cosa consiste il programma e a seguito il codice da me scritto:
Traccia esercizio:
Leggere dal file Input2.txt un testo e data una stringa STR visualizzare a video, per ogni riga del file di input che contiene la sottostringa STR il numero di riga stessa e il numero di volte che STR è presente.
Esempio:
Input2.txt:
4
La casa è bella ed è una casa costosa
Nella sua casa ci sono tante stanze
In giardino non ci sono ancora piante
All’interno della casa le porte sono sempre aperte
STR=casa
Output (a video):
1 2
2 1
4 1
Mio codice:
codice:
import java.util.Scanner;
import java.io.FileReader;
class Leggi2 {
public static void main (String [] args) throws Exception {
Scanner s = new Scanner (new FileReader ("Input2.txt"));
String chiave = "casa";
int n = s.nextInt ();
int n1;
for (int i=0;i<=n;i++) {
n1 = numeroOccorrenze (s.nextLine () , chiave);
if (n1 != 0) {
System.out.println (i + "\t" + n1);
}
}
}
public static int numeroOccorrenze (String riga , String chiave) {
int numero = 0;
int indice;
while ((indice = riga.indexOf (chiave)) != -1) {
numero++;
riga = riga.substring (indice + chiave.length ());
}
return numero;
}
}
Quello che non mi torna è alla riga in grassetto , dove mettendo i , a mio avviso viene stampato (i+1)
secondo quello che era la mia previsione , mettendo nel codice "i" sarebbe dovuto uscire a video:
0 2
1 1
3 1
mentre invece esce:
1 2
2 1
4 1
che è proprio quello voluto...ma il perchè avviene ciò?c'è qualcosa che mi sfugge?