View Single Post
Old 17-06-2009, 18:36   #1
InsomNia_Italy
Member
 
Iscritto dal: Jan 2007
Messaggi: 75
[JAVA] Alcune perplessità riguardo le classi...

Ciao a tutti.

Sto facendo un po di pratica nella programmazione Java ed un po alla volta sto riuscendo e capendo il funzionamento del tutto. Portate pazienza se non sarò tecnico

Questo pomeriggio stavo provando a creare un programmino semplice semplice per l'immissione in array di oggetti di Classi scolastiche e relativi Alunni di ogni classe. Ho creato due classi, proprio ALUNNO e CLASSESCUOLA. Pubblico qui il codice completo:

Codice:
import java.io.*;
import java.util.*;

public class Scuola{
	static int sizeClassiScuola = 0;
	private static CLASSESCUOLA [] classescuola = new CLASSESCUOLA[50];
	static BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
	
        public static void main(String args[]) throws IOException{		
    		//-------------------------------------------------------
	 for(;;){  	
     			System.out.println("-----------------------------------------------");
     			System.out.println("Rubrica elettronica Scuola");
		        System.out.println();
		        System.out.println("1) Visualizza classi e alunni");
		        System.out.println("2) Aggiungi nuova classe");
		        System.out.println("0) Chiudere rubrica");
		        System.out.println();
		    //-------------------------------------------------------
	    		int Scelta = 0;
	 ciclo: for(;;){
		        System.out.print("Inserire il numero della tua scelta: ");
			Scelta = Integer.parseInt(in.readLine());      
			switch(Scelta){
		        case 1: 
		        	if (sizeClassiScuola>0){
		        		//VISUALIZZARE CONTATTI
		        		Scuola.VisualizzaClassi();
		            	in.readLine();
		        	}else{ 
		        		System.out.println("Nessuna classe da visualizzare!");
		        		in.readLine();
		        	}
		        	break ciclo;
		        case 2:
		        	//AGGIUNGI NUOVA CLASSE
		        	Scuola.AggiungiClasse();
		        	break ciclo;
		        case 0:
		        	//CHIUDERE RUBRICA
		        	System.out.println("Chiusura agenda...");		        	
		        	System.exit(0);
		        default:
		        	//SCELTA NON VALIDA
		        	System.out.println("Scelta non valida");		           
			 }
		 }}
        }
               
        public static void AggiungiClasse() throws IOException{
        	int quanteClassi = 0;
        	String nuovonome = "";
        	String linea = "";
        	System.out.print("Quante classi vuoi aggiungere?: ");
        	quanteClassi = Integer.parseInt(in.readLine());
        	System.out.println("-----------------------------------------------");
        	System.out.println("I dati vanno inseriti nella forma: ( IA - IIB - IIIC - IVD - VE)");
        	//CICLO DI ACQUISIZIONE
        	int sizePreAcquisizione = sizeClassiScuola;
        	for (int contClasse=0;contClasse<quanteClassi;contClasse++){
        		System.out.print("Classe " + (contClasse+1) + " su "+ quanteClassi + ":");
        		nuovonome = in.readLine();
        		System.out.print("Quanti alunni vuoi aggiungere nella " + nuovonome + "?: ");
            	int QuantiAlunni = Integer.parseInt(in.readLine());
        		classescuola[contClasse+sizePreAcquisizione] = new CLASSESCUOLA(nuovonome,QuantiAlunni);
        		sizeClassiScuola++;
            	System.out.println("-----------------------------------------------");
            	System.out.println("I dati vanno inseriti nella forma: COGNOME NOME");
            	//CICLO DI ACQUISIZIONE
            			for (int contAlunni=0;contAlunni<QuantiAlunni;contAlunni++){
            				System.out.print("Nominativo " + (contAlunni+1) + " su "+ QuantiAlunni + ":");
            				linea = in.readLine();
            				//SPEZZO LA STRINGA
            				StringTokenizer tz = new StringTokenizer(linea);
            				String cognome = tz.nextToken();
            				String nome = tz.nextToken();
            				classescuola[contClasse].newAlunno(cognome, nome, contAlunni);
            			}
        	}
        }
        
        public static void VisualizzaClassi() throws IOException{
       		for (int cont=0;cont<sizeClassiScuola;cont++){
        		System.out.println(cont+1 + "° Classe: " + classescuola[cont].getClasse());
        		System.out.println("\t Alunni che compongono la classe:");
        		for (int cont2=0;cont2<classescuola[cont].getNumeroAlunni();cont2++){
        			System.out.println("\t   - " + classescuola[cont].getAlunno(cont2).getCognome() + " " + classescuola[cont].getAlunno(cont2).getNome());
        		}
        	}       
        }
        
} //FINE CLASSE RUBRICA


class ALUNNO{
	private String cognome;
	private String nome;
	
	public ALUNNO(String cogn,String nom)	{
	   cognome = cogn;
	   nome = nom;
	}
	public String getCognome(){
		return cognome;
	}
	public String getNome(){
		return nome;
	}
} //FINE CLASSE ALUNNO
class CLASSESCUOLA{
	private ALUNNO [] al = new ALUNNO[50];
	private String classe;
	private Integer numeroAlunni;
	
	public CLASSESCUOLA(String cl,Integer numAlunni)	{
	   classe = cl;
	   numeroAlunni = numAlunni;
	}
	public String getClasse(){
		return classe;
	}	
	public Integer getNumeroAlunni(){
		return numeroAlunni;
	}	
	public ALUNNO getAlunno(Integer Indice){
		return al[Indice];
	}
	public String newAlunno(String Cognome,String Nome,Integer Cont){
		al[Cont] = new ALUNNO(Cognome,Nome);
		return null;
	}
	
} //FINE CLASSE CLASSESCUOLA
Il programma in se funziona ma ho alcune perplessità. E' necessario implementare all'interno della classe CLASSESCUOLA il codice:
Codice:
	public String newAlunno(String Cognome,String Nome,Integer Cont){
		al[Cont] = new ALUNNO(Cognome,Nome);
		return null;
	}
per poter aggiungere un nuovo alunno all'interno della classe?
Devo necessariamente specificare l'indice di ogni nuovo alunno creato?
Non esiste un modo più semplice per aggiungere un nuovo alunno in coda a quelli precedentemente creati, qualora ce ne fossero?

Altra cosa.

Devo necessariamente specificare ogni volta il numero di oggetti da creare?
Codice:
	private ALUNNO [] al = new ALUNNO[50];
Come posso rendere il tutto automatico per evitare errori di NullPointetc...?

Ultima domanda
All'interno del metodo VisualizzaClassi utilizzo
Codice:
classescuola[cont].getAlunno(cont2).getCognome()
Va bene cosi oppure mi conviene dichiarare l'oggetto ALUNNO di tipo public ed utilizzare direttamente
Codice:
classescuola[cont].al[cont2].getCognome()
senza utlizzare il metodo getAlunno della classe CLASSESCUOLA?

Grazie, spero possiate aiutarmi
InsomNia_Italy è offline   Rispondi citando il messaggio o parte di esso