Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente bannato
    Registrato dal
    Dec 2000
    Messaggi
    147

    Java come lo risolvo sto problema

    Il problema è il seguente: ho un file di testo da dove reperire dei dati formato nel seguente modo

    nome
    voto
    nome
    voto
    .
    .

    Il problema è quello di creare un oggetto studente, di caricare un vettore di tipo studente, ed stampare il nome ed il voto sia dal vettore che tramite due metodi che si trovino nella stessa classe dove si crea l'oggetto studente.
    Io penso di aver risolto il problema ma l'errore che compare è il seguente.

    java.lang.NumberFormatException: null at java.lang.Integer.parseInt(Integer.java:382) at java.lang.Integer.parseInt(Integer.java:463) at prova2.Studente.leggi(Studente.java:20) at prova2.Registro.main(Registro.java:34)Exception in thread "main"

    Questo è il codice della classe registro

    import java.io.*;
    import java.util.*;
    public class Registro {

    public static void main(String args[])throws Exception {
    //Leggo dal file i dati che mi servono
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:/Documents and Settings/GIULIANO1/Desktop/progetti/scuola.txt")));
    //Una variabile di tipo String per il nome
    String nome= "inizio";
    //Una variabile di tipo intero dove inserire il voto
    int voto= 0;
    //Un vettore che sarà riempito di oggetti di tipo studente
    Vector v = new Vector();
    //Variabile di appoggio
    Studente temp;

    //Mi creo il primo oggetto Studente che mi servirà per richiamare il metodo leggi per creare gli altri oggetti Studente
    Studente allievo = new Studente(nome, voto);
    System.out.println();

    while(allievo != null) {
    //Comincio la creazione degli oggetti Studente
    Studente allievo2 = allievo.leggi(br);
    //Inserisco gli oggetti nel vettore
    v.addElement(allievo2);
    //Richiamo dei metodi della classe studente con il solo scopo di verificare il
    //loro funzionamento ISTRUZIONE SUPERFLUA
    System.out.println(allievo2.getNome() + " " + allievo2.getMedia() + " ");
    //Assegnazione che dovrebbe permettermi di uscire dal ciclo
    allievo = allievo2;
    }
    //Scorro il vettore e dovrei stampare
    Enumeration enum = v.elements();
    while(enum.hasMoreElements()) {
    temp = (Studente) enum.nextElement();
    System.out.println(temp.nome + " " + temp.voto);
    }


    }
    }

    Questo quello della classe Studente
    import java.io.*;
    class Studente {
    public Studente(String nome, int voto){
    this.nome = nome;
    this.voto = voto;
    }
    public static Studente leggi(BufferedReader br)throws Exception{
    String nome = br.readLine();
    int voto = Integer.parseInt(br.readLine());
    Studente newStudente = new Studente(nome, voto);
    return newStudente;
    }

    public int getMedia(){
    return voto;
    }

    public String getNome(){
    return nome;
    }
    private String nome;
    private int voto;
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    315
    Sarabbe meglio che evitassi di aprire due thread uguali, se vedi che non ottieni risposta con il primo, puoi sempre includere una altro messaggio (anche vuoto) per farlo tornare in cima alla lista.
    Un' altra cosa: inserici il tuo codice tra i tag [ CODE ] e [ /CODE ] (senza spazi), in tal modo codice risultera' formattato e piu' semplice da comprendere.

    Detto questo ti includo la soluzione al problema. Ci sono almeno due errori gravi, in quello che hai scritto tu: devi imparare ad usare la gestione degli errori con try e catch, visto che e' un meccanismo piuttosto potente, ti consente di scrivere codice piu' elegante e piu' robusto.

    codice:
    import java.io.*;
    import java.util.*;
    
    public class Registro {
    	public static void main(String args[])throws Exception {
    		//Leggo dal file i dati che mi servono
    		File myFile = new File("./studenti.txt");
    		BufferedReader br = new BufferedReader(new FileReader(myFile));
    		//Un vettore che sarà riempito di oggetti di tipo studente
    		Vector v = new Vector();
    	
    		Studente allievo = Studente.leggi(br);
    	
    		while(allievo != null) {
    			//Inserisco gli oggetti nel vettore
    			v.addElement(allievo);
    			System.out.println(allievo.getNome() + " " + allievo.getMedia() + " ");
    			//Assegnazione che dovrebbe permettermi di uscire dal ciclo
    			allievo = Studente.leggi(br);
    		}
    		try {
    			//ricorda di chiudere i file
    			br.close();
    		} catch(IOException eIO) {
    			eIO.printStackTrace(System.out);
    		}
    		//Scorro il vettore e dovrei stampare
    		Enumeration enum = v.elements();
    		while(enum.hasMoreElements()) {
    			allievo = (Studente) enum.nextElement();
    			System.out.println(allievo.getNome() + " " + allievo.getMedia());
    		}
    	}
    }
    
    class Studente {
    
    	private String nome;
    	private int voto;
    
    	public Studente(String nome, int voto){
    		this.nome = nome;
    		this.voto = voto;
    	}
    
    	public static Studente leggi(BufferedReader br) throws Exception{
    		String tmp = br.readLine();
    		//Se il file arriva alla fine, esce dal metodo restituendo null
    		if(tmp == null) return null;
    		String nome = tmp;
    		//Stessa considerazione di prima, se non c'e' il voto dopo il nome
    		tmp = br.readLine();
    		if(tmp == null) return null;
    		int voto = Integer.parseInt(tmp);
    		//inutile creare un oggetto solo per restituirlo
    		return new Studente(nome, voto);
    	}
    
    	public int getMedia(){
    		return voto;
    	}
    
    	public String getNome(){
    		return nome;
    	}
    }
    In questo modo funziona, se non capisci qualche correzione, chiedi pure.
    Ciao,
    Lorenzo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.