no, tu fai

codice:
String stringa =null;
            while(sc.hasNext()){
                if(stringa.equals("fine")){
stringa ancora non è inizializzata, provi a chiamare un metodo su un oggetto che ancora non hai valorizzato (quindi su null).
Va in eccezione stringa.equals, questo, indipendentemente da quanto vale quello con cui confronti.

Se ad esempio tu avessi fatto "fine".equals(stringa) avresti avuto false, senza eccezioni (vediamo se ti rendi conto del perché).

Riguardo al pattern: ti rispondo quando passa il mal di testa e ragiono meglio