E' buona pratica sottoporre lo stacktrace dell'errore, la prox volta mettilo.
Quell'errore cmq te lo darà il primo Integer.parseInt() utile quando gli chiederai il miracolo di ricondurre ad un numero intero una parola qualsiasi.
Es.:
codice:
Integer.parseInt("8");//OK
Integer.parseInt("Francesco");//Esplosione Atomica
Ti ho lascio un metodino con boolean di ritorno per la verifica innocua di questo particolare e simpatico problema:
codice:
public static boolean isNumeric(String str)
{
return str.matches("-?\\d+(\\.\\d+)?");
}
Tornando a noi, non mi torna molto quello che hai scritto rispetto alla traccia.
Cmq se ho capito bene quello che avevi intenzione di fare ho provato a fare questo:
codice:
public class TestEsame{
private static final Pattern delimiters = Pattern.compile(System.getProperty("line.separator")+"|\\#");
private static Scanner scan = null;
private static int position = 0;
private static String[] arguments = {"materia: ", "cfu: ","voto: "};
public static void main(String[] args){
scan = new Scanner(System.in).useDelimiter(delimiters);
while (scan.hasNext()){
String i = scan.next();
if(i.equalsIgnoreCase("END")){
break;
}
else{
System.out.println(arguments[position]+i);
position = position>1 ?0:position +1 ;
System.out.println(position);
}
}
System.out.println("\r\n-------------Elaborazione Terminata------------");
scan.close();
}
}
I problemi che avresti adesso:
- Occhio che il Tokenizer o il Delimiter non ti restituiranno mai l'ultimo token a causa del "System.In" che in quanto Stream non ha mai fine finchè non lo si chiude. Ho usato la regex apposta.
- Il loop è molto scomodo, e sopratutto non è possibile verificare il count e la posizione, anche in virtù di quanto detto sopra, per cui se inputi una stringa con numero di argomenti inferiore, sballa tutto (ma non esplode).
Lascio a te il divertimento di adattare come + ti pare e piace 
PS: se apri gli oggetti ricorda di chiuderli ------>scan.close(); .