Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    5

    Anomalia lettura variabile.

    Ciao a tutti mi chiamo Daniele e sono nuovo di questo forum.
    E' da poco che sono entrato nel mondo della programmazione in java e ho un problema in un piccolo programma dove devo inserire dei semplici dati anagrafici in riguardo ad uno o piu studenti.Quando lancio il programma, la prima cosa che fa mi chiede quanti studenti voglio inserire, quindi in base al numero passa all'insermento del 1° studente(cognome,nome,data di nascita,sesso,titolo di studio), inserito il sesso, premo invio, mi dovrebbe far inserire il titolo di studio, invece passa avanti lasciandomi la variabile vuota. Lo stesso problema poi lo fa quando passo all'inserimento del 2° stud. saltando il cognome e andando direttamente all'inserimento del nome. Qualcuno mi ha detto che devo ripulire l'area di memoria con il comando System.out.flush(), ma non mi ha risolto il problema.Spero che il problema sia chiaro, saluti e grazie anticipatamente.

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Senza vedere il codice è un po' difficile capire cosa c'è che non va...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    5
    Ciao, ecco il codice.


    public static void main(String[] args) throws IOException
    {
    // TODO code application logic here
    final int max_ele=10;
    int i,n_studenti=0;
    char sesso;
    int controllo_data=0;
    int gg=0,mm=0,aa=0;
    String cognome=" ";
    String nome=" ";
    String titolo_s=" ";
    Scanner in=new Scanner (System.in);
    InputStreamReader input = new InputStreamReader(System.in);
    BufferedReader leggi = new BufferedReader(input);
    System.out.println(" Gestione iscrizione studenti.");
    System.out.println();
    do
    {
    System.out.print("Inserire il numero di studenti da inserire: ");
    n_studenti=in.nextInt();
    if (n_studenti>max_ele)
    System.out.println("Attenzione puoi inserire massimo "+max_ele+" studenti.");
    }while (n_studenti>max_ele);
    //studente stud[]=new studente();
    studente[] stud = new studente[max_ele];
    for (i=0;i<n_studenti;i++)
    {
    stud[i]=new studente();
    stud[i].set_matricola(i+1);
    System.out.println("Inserimento dati del "+(i+1)+"° studente");
    System.out.println("Matricola n° "+(i+1)+" assegnata.");
    stud[i].set_matricola(i+1);
    System.out.print("Cognome: ");
    cognome=leggi.readLine();
    stud[i].anagrafica.nominativo.set_cognome(cognome);
    System.out.print("Nome: ");
    nome=leggi.readLine();
    stud[i].anagrafica.nominativo.set_nome(nome);
    do
    {
    System.out.println(" inserisci data di nascita: ");
    System.out.print("---->Giorno: ");
    gg=in.nextInt();
    stud[i].anagrafica.data_nascita.set_giorno(gg);
    System.out.print("---->Mese: ");
    mm=in.nextInt();
    stud[i].anagrafica.data_nascita.set_mese(mm);
    System.out.print("---->Anno: ");
    aa=in.nextInt();
    stud[i].anagrafica.data_nascita.set_anno(aa);
    controllo_data=stud[i].anagrafica.data_nascita.controllo_data();
    }while (controllo_data!=0);
    System.out.print("Inserire sesso: ");
    sesso =(char) leggi.read();
    while (sesso !='m' && sesso!='f')
    {
    System.out.println("Attenzione la scelta "+sesso+" non è corretta");
    System.out.flush();
    System.out.print("Inserire sesso: ");
    sesso =(char) leggi.read();
    }
    stud[i].anagrafica.set_sesso(sesso);
    System.out.print("Inserire titolo di studio: ");
    System.out.flush();
    titolo_s=in.nextLine();
    stud[i].set_titolo_studio(titolo_s);
    }

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Originariamente inviato da mx2504t
    Ciao a tutti mi chiamo Daniele e sono nuovo di questo forum.
    Ciao e benvenuto nel forum di Programmazione.

    Ti segnalo da subito la lettura del Regolamento che contiene tutte le norme da seguire per partecipare correttamente a quest'area del forum.

    Nel caso specifico, ricordati di usare il tag CODE quando riporti del codice.

    Detto questo, ciao e...buon forum!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Ciao, ti posto una versione funzionante e "rivista" del tuo sorgente.
    Più o meno ho cercato di mantenere la tua "struttura" (ammesso che si possa chiamare così :-) ) Ho aggiunto le classi che mancavano, cercando di farmi un'idea da quello che vedevo bel blocco di codice che hai postato.
    Può essere interessante vedere l'uso dei costruttori delle varie sottoclassi (ti ho aggiunto dei commenti qua e la nel codice). In generale "funziona", anche se è tutt'altro che bello.

    codice:
    import java.io.IOException;
    import java.util.Scanner;
    
    
    public class GestioneStudenti {
    
    	private static final int max_ele = 10; // Definiamo una costante max_ele di 10 elementi
    	
    	private GestioneStudenti() {
    	}
    
    	private void execute () {
    		int i, n_studenti = 0;  // L'inizializzazione a 0 sugli int e' ridondante
    		String sesso;
    		int controllo_data = 0;
    		int gg = 0, mm = 0, aa = 0;
    		String cognome = " ";
    		String nome = " ";
    		String titolo_s = " ";
    		Scanner in = new Scanner (System.in);
    		// InputStreamReader input = new InputStreamReader(System.in);
    		// BufferedReader leggi = new BufferedReader(input);
    		System.out.println(" Gestione iscrizione studenti.");
    		System.out.println();
    		do {
    			System.out.print("Inserire il numero di studenti da inserire: ");
    			n_studenti = in.nextInt();
    			if (n_studenti>max_ele)
    				System.out.println("Attenzione puoi inserire massimo "+max_ele+" studenti.");
    		} while ((n_studenti < 1) || (n_studenti > max_ele));
    	//	studente stud[]=new studente();
    		Studente[] stud = new Studente[max_ele];
    		for (i=0; i < n_studenti; i++) {
    			stud[i] = new Studente();
    			stud[i].setMatricola(i+1);
    			System.out.println("Inserimento dati del "+(i+1)+"° studente");
    			System.out.println("Matricola n° "+(i+1)+" assegnata.");
    			stud[i].setMatricola(i+1);
    			System.out.print("Cognome: ");
    			cognome = in.next();
    			// cognome=leggi.readLine();
    			stud[i].getAnagraficaStudente().getNomeStudente().setCognome(cognome);
    			System.out.print("Nome: ");
    			// nome=leggi.readLine();
    			nome = in.next();
    			stud[i].getAnagraficaStudente().getNomeStudente().setNome(nome);
    			do {
    				System.out.println(" inserisci data di nascita: ");
    				System.out.print("---->Giorno: ");
    				gg = in.nextInt();
    				stud[i].getAnagraficaStudente().getDataNascita().setGiorno(gg);
    				System.out.print("---->Mese: ");
    				mm = in.nextInt();
    				stud[i].getAnagraficaStudente().getDataNascita().setMese(mm);
    				System.out.print("---->Anno: ");
    				aa = in.nextInt();
    				stud[i].getAnagraficaStudente().getDataNascita().setAnno(aa);
    				controllo_data = 0;
    				// controllo_data=stud[i].anagrafica.data_nascita.controllo_data();
    			} while (controllo_data != 0);
    			System.out.print("Inserire sesso: ");
    			// sesso =(char) leggi.read();
    			sesso = in.next();
    			while ((!sesso.toLowerCase().equals("m")) && (!sesso.toLowerCase().equals("f"))) {
    				System.out.println("Attenzione la scelta "+sesso+" non è corretta");
    				System.out.flush();
    				System.out.print("Inserire sesso: ");
    				// sesso =(char) leggi.read();
    				sesso = in.next();
    			}
    			stud[i].getAnagraficaStudente().setSesso(sesso);
    			System.out.print("Inserire titolo di studio: ");
    			System.out.flush();
    			titolo_s=in.next();
    			stud[i].setTitoloStudio(titolo_s);
    		}		
    	}
    
    	public static void main(String[] args) throws IOException {
    		//TODO code application logic here
    		GestioneStudenti gestione = new GestioneStudenti();
    		gestione.execute();
    	}
    	
    	public class Nominativo {
    
    		private String nome;
    		private String cognome;
    
    		/**
    		 * Costruttote standard con cui inizializzare le variabili della classe automaticamente ad ogni new.
    		 * In pratica quando si fara' new Nominativo(); l'istanza verrà creata con i valori iniziali 
    		 * specificati in questo metodo.
    		 */
    		public Nominativo () {
    			this.nome = "";
    			this.cognome = "";
    		}
    
    		/**
    		 * @return Returns the cognome.
    		 */
    		public String getCognome() {
    			return cognome;
    		}
    
    		/**
    		 * @param cognome The cognome to set.
    		 */
    		public void setCognome(String cognome) {
    			this.cognome = cognome;
    		}
    
    		/**
    		 * @return Returns the nome.
    		 */
    		public String getNome() {
    			return nome;
    		}
    
    		/**
    		 * @param nome The nome to set.
    		 */
    		public void setNome(String nome) {
    			this.nome = nome;
    		}
    
    	}
    
    	public class DataNascita {
    		private int giorno;
    		private int mese;
    		private int anno;
    
    		/**
    		 * Costruttote standard. L'inizializzaione e' superflua in quanto gli int, per default vengono inizializzati a 0.
    		 * Tuttavia se vuoi cambiare il valore iniziale . . . puoi farlo qui
    		 */
    		public DataNascita () {
    			this.giorno = 0;
    			this.mese = 0;
    			this.anno = 0;
    		}
    
    		/**
    		 * @return Returns the anno.
    		 */
    		public int getAnno() {
    			return anno;
    		}
    
    		/**
    		 * @param anno The anno to set.
    		 */
    		public void setAnno(int anno) {
    			this.anno = anno;
    		}
    
    		/**
    		 * @return Returns the giorno.
    		 */
    		public int getGiorno() {
    			return giorno;
    		}
    
    		/**
    		 * @param giorno The giorno to set.
    		 */
    		public void setGiorno(int giorno) {
    			this.giorno = giorno;
    		}
    
    		/**
    		 * @return Returns the mese.
    		 */
    		public int getMese() {
    			return mese;
    		}
    
    		/**
    		 * @param mese The mese to set.
    		 */
    		public void setMese(int mese) {
    			this.mese = mese;
    		}
    
    	}
    
    	public class Anagrafica {
    		private Nominativo nomeStudente;
    		private DataNascita dataNascita;
    		private String sesso;
    
    		/**
    		 * Costruttore standard. Notare l'uso dei costruttori delle classi interne
    		 */
    		public Anagrafica() {
    			this.nomeStudente = new Nominativo();  // Richiama il costruttore della classe Nominativo con le sue inizializzazioni
    			this.dataNascita = new DataNascita();  // Richiama il costruttore della classe DataNascita con le sue inizializzazioni
    			this.sesso = "";
    		}
    
    		/**
    		 * @return Returns the dataNascita.
    		 */
    		public DataNascita getDataNascita() {
    			return dataNascita;
    		}
    
    		/**
    		 * @param dataNascita The dataNascita to set.
    		 */
    		public void setDataNascita(DataNascita dataNascita) {
    			this.dataNascita = dataNascita;
    		}
    
    		/**
    		 * @return Returns the nomeStudente.
    		 */
    		public Nominativo getNomeStudente() {
    			return nomeStudente;
    		}
    
    		/**
    		 * @param nomeStudente The nomeStudente to set.
    		 */
    		public void setNomeStudente(Nominativo nomeStudente) {
    			this.nomeStudente = nomeStudente;
    		}
    
    		/**
    		 * @return Returns the sesso.
    		 */
    		public String getSesso() {
    			return sesso;
    		}
    
    		/**
    		 * @param sesso The sesso to set.
    		 */
    		public void setSesso(String sesso) {
    			this.sesso = sesso;
    		}
    
    	}
    
    	public class Studente {
    		private Anagrafica anagraficaStudente;
    		private int matricola;
    		private String titoloStudio;
    		// private ElencoEsami elencoEsami;
    
    		/**
    		 * Costruttore standard con inizializzazione delle variabili di istanza
    		 */
    		public Studente() {
    			this.anagraficaStudente = new Anagrafica();  // Richiama il costruttore della classe anagrafica con le sue inizializzazioni
    			this.matricola = 0;
    			this.titoloStudio = "";
    		}
    
    		/**
    		 * @return Returns the anagraficaStudente.
    		 */
    		public Anagrafica getAnagraficaStudente() {
    			return anagraficaStudente;
    		}
    
    		/**
    		 * @param anagraficaStudente The anagraficaStudente to set.
    		 */
    		public void setAnagraficaStudente(Anagrafica anagraficaStudente) {
    			this.anagraficaStudente = anagraficaStudente;
    		}
    
    		/**
    		 * @return Returns the matricola.
    		 */
    		public int getMatricola() {
    			return matricola;
    		}
    
    		/**
    		 * @param matricola The matricola to set.
    		 */
    		public void setMatricola(int matricola) {
    			this.matricola = matricola;
    		}
    
    		/**
    		 * @return Returns the titoloStudio.
    		 */
    		public String getTitoloStudio() {
    			return titoloStudio;
    		}
    
    		/**
    		 * @param titoloStudio The titoloStudio to set.
    		 */
    		public void setTitoloStudio(String titoloStudio) {
    			this.titoloStudio = titoloStudio;
    		}
    
    
    
    	}
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    5
    Grazie per prima cosa.Adesso provo un po a guardarlo e se non ti secca, puoi spegarmi qualche punto che non mi è chiaro?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    5
    Voxel di nuovo grazie per la disponibilita, ho provato ciò che mi hai impostato e funziona perfettamente, ho guardato anche un po come hai scritto il codice e ci sono alcuni punti che non riesco ancora a capire, nel senso che è da poco che ho iniziato la programmazione a oggetti e secondo me devo ancora integrarmi bene nell'uso delle classi ecc....
    In riguardo al mio programma qual'era il problema che faceva verificare la situazione che ho spiegato sopra?

  8. #8
    Posso darti delle risposte parziali perché mi mancano tutte le classi che utilizzavi, tipo la classe Studente, la classe Anagrafica, di cui richiami un'istanza da dentro l'istanza di studente, ed anche la classe DataNascita.
    Quindi potrebbero esserci dei problemi anche li.
    Posso dirti qualcosa sul codice che hai postato.
    Innanzitutto, ripristina la tua funzione di controllo sulla data di nascita messa in input, perché io l'ho commentata (non ho perso tempo a crearla)

    Questa è il blocco di righe che devi sistemare:

    controllo_data = 0;
    // controllo_data=stud[i].anagrafica.data_nascita.controllo_data();
    } while (controllo_data != 0);


    Devi mettere il tuo metodo "controllo_data()" nella classe DataNascita che ho postato, dichiarandolo come gli altri.
    Quindi abiliti la riga commentata:

    // controllo_data=stud[i].anagrafica.data_nascita.controllo_data();

    trasformandola in

    controllo_data = . . . .

    sistemandola opportunamente e commenti la riga:

    controllo_data = 0;

    scrivendo:

    // controllo_data = 0

    Tieni presente che le righe che commenti puoi anche cancellarle perché di fatto sono disattivate.
    Di sicuro un problema e' rappresentato dall'uso simultaneo della classe Scanner e delle classi: InputStreamReader e BufferedReader che insieme consentono di fare le stesse operazioni della classe Scanner. Invece tu usavi casualmente l'una o le altre. Questo potrebbe dar luogo a dei problemi.

    Per intenderci consideriamo queste due versioni della medesima classe.
    Le due versioni fanno esattamente la stessa cosa, solo che una usa la classe Scanner e l'altra la coppia di classi InputStreamReader, BufferedReader.

    Versione 1
    codice:
    import java.util.Scanner;
    
    public class InputTest {
    
    	public static void main (String[] args) {
    		Scanner in = new Scanner(System.in);
    
    		System.out.print("Nome: ");
    		String nome = in.nextLine();
    
    		System.out.print("Cognome: ");
    		String cognome = in.nextLine();
    
    		System.out.print("Eta': ");
    		int age = in.nextInt();
    
    		System.out.println("Ciao " + nome + " " + cognome);
    		System.out.println("Al tuo prossimo compleanno compirai: " + (age + 1) + " anni.");
    	}
    }
    Versione 2
    codice:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class InputTest2 {
    
    	public static void main (String[] args) {
    		InputStreamReader input = new InputStreamReader(System.in);
    		BufferedReader leggi = new BufferedReader(input);
    
    		try {
    			System.out.print("Nome: ");
    			String nome = leggi.readLine();
    	
    			System.out.print("Cognome: ");
    			String cognome = leggi.readLine();
    	
    			System.out.print("Eta': ");
    			int age = Integer.parseInt(leggi.readLine());
    			System.out.println("Ciao " + nome + " " + cognome);
    			System.out.println("Al tuo prossimo compleanno compirai: " + (age + 1) + " anni.");
    		}
    		catch (IOException iex) {
    			System.out.println("Si e' verificato il seguente errore: " + iex.getMessage());
    		}
    	}
    
    }
    Questo è quanto posso dirti al momento, ciao

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 © 2026 vBulletin Solutions, Inc. All rights reserved.