1. sc.close() non è obbligatorio ma è una buona pratica: dopo che hai terminato di utilizzare una risorsa dovresti chiuderla e/o rilasciarla.
2. tu vuoi leggere una riga e stampare le parole, poi leggere un'altra riga e stampare le parole, poi leggere un'altra riga ecc. Quindi la stampa (il ciclo for) la devi fare PRIMA della lettura della riga successiva. Altrimenti perdi tutto quello che avevi letto fino a quel momento. Di conseguenza
codice:do { leggi e stampa (con ciclo for) } while (ci sono altre righe da leggere);