Errore in esercizio su eccezioni

di il
2 risposte

Errore in esercizio su eccezioni

Salve a tutti, ho riscontrato un problema con un piccolo esercizio sulle eccezioni.
In pratica si richiede all'utente di inserire divisi da un ; i voti degli esami svolti, e successivamente ne calcola media e massimo.
L'errore che esce è il seguente: Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
eccezione che si riferisce alla riga in cui è scritto:
v.add(Integer.parseInt(s.nextToken()));
Vi riporto ora l'intero codice:
package esercizioException;
import java.util.StringTokenizer;
import prog.io.ConsoleInputManager;
import prog.io.ConsoleOutputManager;
import java.util.Vector;
public class esercizio {
	

	public static void main(String[] args) throws RuntimeException {
		// TODO Auto-generated method stub
		RuntimeException e1 = new RuntimeException();
		ConsoleInputManager tastiera = new ConsoleInputManager ();
		ConsoleOutputManager schermo = new ConsoleOutputManager ();
		Vector <Integer> v = new Vector <> ();
		StringTokenizer s;
		float media=0;
		float massimo=0;
		String riga = tastiera.readLine("Inserisci voti, separati da ; : ");
		s= new StringTokenizer (riga, ";");
		try {
	    while(s.hasMoreTokens()) {
	    	if((Integer.parseInt(s.nextToken())) <18 ||(Integer.parseInt(s.nextToken())) >30 ) {
	    	throw e1;
	    	}
	    	
	    	else {
	    	v.add(Integer.parseInt(s.nextToken()));
	    	}
	                             }
		}
		catch (NumberFormatException e) {
			e.printStackTrace();
		}
		int i=0;
		while(i<v.size()) {		
			media=media + v.elementAt(i);
			if(v.elementAt(i) >= massimo) massimo = v.elementAt(i);
			i++;
		}
		media=media/v.size();
		schermo.println("La media è: " + media);
		schermo.println("Il massimo è: " + massimo);
		
		
			
		
		
	}

}
Grazie in anticipo

2 Risposte

  • Re: Errore in esercizio su eccezioni

    g.lombardo4 ha scritto:


    	    	if((Integer.parseInt(s.nextToken())) <18 ||(Integer.parseInt(s.nextToken())) >30 ) {
    Un errore un po' "subdolo". Hai una "or" ma attenzione: nextToken() CONSUMA il token.
    Prende un token e lo converte in int. E' inferiore a 18? Se sì lanci eccezione. Se no, attenzione, consumi un ALTRO token che poi confronti con 30!! Quindi NON è un singolo valore che verifichi per <18 e >30.
    Conclusione: ragiona in generale di più su come trattare i token.
  • Re: Errore in esercizio su eccezioni

    andbin ha scritto:


    g.lombardo4 ha scritto:


    	    	if((Integer.parseInt(s.nextToken())) <18 ||(Integer.parseInt(s.nextToken())) >30 ) {
    Un errore un po' "subdolo". Hai una "or" ma attenzione: nextToken() CONSUMA il token.
    Prende un token e lo converte in int. E' inferiore a 18? Se sì lanci eccezione. Se no, attenzione, consumi un ALTRO token che poi confronti con 30!! Quindi NON è un singolo valore che verifichi per <18 e >30.
    Conclusione: ragiona in generale di più su come trattare i token.
    Va bene, adesso allora ci ragiono sopra... grazie
Devi accedere o registrarti per scrivere nel forum
2 risposte