Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Creare sequenza numerica oppure inserimento univoco di numeri

    Buongiorno a tutti, mi chiamo Andrea e da qualche mese sto seguendo un corso di formazione java, dovrei creare un programma dove inserire dei dati di studenti, tra questi i numeri di matricola, ma vorrei inserire un controllo che impedisca di inserire 2 volte lo stesso numero in modo che sia univoco, oppure meglio creare una sequenza crescente di numeri in modo da non doverlo nemmeno scrivere.
    Qualcuno potrebbe scrivermi un codice d'esempio?
    Per ora ho scritto questo codice, grazie a tutti!

    codice:
    package presentazione;
    
    
    public class Studente extends Persona{
    private int matricola;
    
    
        public Studente(){
            super();
            matricola = 0;
        }
        
        public Studente(String nomeIniziale, int matricolaIniziale){
            super(nomeIniziale);
            matricola = matricolaIniziale;
            
        }
        
        public void reimposta (String nuovoNome, int nuovaMatricola){
            setNome(nuovoNome);
            matricola = nuovaMatricola;
        }
        
        public int getMatricola(){
            return matricola;
        }
        
        public void setMatricola(int nuovaMatricola){
            matricola = nuovaMatricola;
        }
        
        public void scriviOutput(){
            System.out.println("Nome: "+ getNome() );
            System.out.println("Matricola: "+ matricola);
        }
        
    }
    Ultima modifica di LeleFT; 29-08-2016 a 09:23 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    La soluzione più semplice è la seconda proposta da te: avere una sequenza di numeri crescenti ti evita di dovere eseguire il controllo di unicità ed è davvero facile da implementare.
    Ti basta l'uso di una variabile statica (quindi non relativa a nessuna istanza di Studente in particolare, ma "di classe" per così dire) che incrementi alla creazione di ogni nuovo studente.

    Se chiami la variabile totStudenti, quindi, nel costruttore (o nei vari costruttori se ne tieni più di uno, ma quale è la logica nel creare uno Studente senza nome ? Non mi pare molto sensato in questo caso avere un costruttore vuoto, non esiste certo un valore di default a cui è logico impostare il nome se non specificato) basta incrementare questa variabile ed assegnare poi tale valore allo studente corrente.
    Ad esempio :

    codice:
    public class Studente extends Persona
    {
        private static int totStudenti = 0;
        private final int matricola;
        public Studente(String nome){
            super(nome);
            totStudenti = totStudenti+1; // o più semplicemente totStudenti++
            matricola = totStudenti;
        }
    }

    Nota che nel codice ho inserito la keyword final per quanto riguarda il campo matricola: questo assicura di non poter modificare in seguito la matricola di uno studente creato (quindi i metodi per modificare la matricola dovrebbero essere rimossi).
    Se questo vincolo non ti piace, ad esempio vuoi che lo stesso Studente si possa reiscrivere senza ricreare un nuovo oggetto Studente ma solo modificando la matricola, allora puoi rimuovere quella keyword e mantenere i relativi metodi, ma devi gestire anche lì la logica relativa al numero progressivo.

    Ripeto che questa è solo la soluzione più semplice che mi viene in mente, ma a livello di design non è "bellissimo" che sia la classe Studente a conoscere il numero totale di Studenti.
    Questa informazione sarebbe meglio conservarla in una classe a parte, ad esempio UfficioImmatricolazioni, ma a questo punto dovresti assicurarti che sia la sola classe a poter instanziare un nuovo Studente,e la cosa non è banale...
    Ultima modifica di Ansharja; 29-08-2016 a 10:10

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