codice:public class Studente { public String matricola; private String nome; private GregorianCalendar data; public int altezza; private char genere; /** * Costruttore * @param matr matricola * @param nom cognome e nome * @param giorno giorno di nascita * @param mese mese di nascita * @param anno anno di nascita * @param alt altezza * @param gen genere(M o F) */ public Studente(String matr, String nom,int giorno, int mese, int anno, int alt, char gen) { matricola=matr; nome=nom; data=new GregorianCalendar(anno, mese-1, giorno); altezza=alt; genere=gen; } /** * Ottiene il numero di matricola * @return matricola */ public String getMatricola() { return matricola; } /** * Ottiene il cognome e nome dello studente * @return nome */ public String getNome() { return nome; } /** * Ottiene la data di nascita * @return data */ public GregorianCalendar getData() { return data; } /** * Ottiene la data di nascita dello studente in stringa */ public String getDataString() { return String.format("%02d/%02d/%04d", data.get(GregorianCalendar.DATE), data.get(GregorianCalendar.MONTH)+1, data.get(GregorianCalendar.YEAR)); } /** * Ottiene l'altezza * @return altezza */ public int getAltezza() { return altezza; } /** * Ottiene il sesso dello studente * @return genere */ public char getGenere() { return genere; } /** * Visualizza i dati dello studente in stringa */ public String toString() { return "Matricola n. "+matricola+", "+nome+", Nato il "+getDataString()+", altezza "+altezza+", "+genere; } } public class Università { Studente[] stud= new Studente[0]; /** * Aggiunge un nuovo studente * @param matricola matricola * @param nom cognome e nome * @param giorno giorno di nascita * @param mese mese di nascita * @param anno anno di nascita * @param altezza altezza dello studente * @param genere genere(M o F) */ public void addStudente(String matricola, String nom,int giorno, int mese, int anno, int altezza, char genere) { Studente temp[]=new Studente[stud.length+1]; if (stud.length>0) System.arraycopy(stud,0,temp,0,stud.length); temp[temp.length-1]= new Studente(matricola, nom,giorno,mese,anno,altezza,genere); stud=temp; } /** * Ottiene una stringa con una tabella contenente i dati degli studenti * @return str */ public String getTable() { String format ="%-9s|%-20s|%-11s|%-7s|%-6s"; String str; str=String.format(format,"=========","============ ========","===========","=======","======")+"\n"; str+=String.format(format,"Matricola","Cognome e nome","DataNascita","Altezza","Genere")+"\n"; str+=String.format(format,"=========","=========== =========","===========","=======","======")+"\n"; for (Studente e:stud) str+=String.format(format,e.getMatricola(),e.getNo me(),e.getDataString(),e.getAltezza(),e.getGenere( ))+"\n"; str+=String.format(format,"=========","=========== =========","===========","=======","======")+"\n"; return str; } /** * Ottiene i dati dello studente più giovane * @return stringa */ public String getYoungest() { Studente min; min=stud[0]; for (int i=0;i<stud.length;i++) { if( stud[i].getData().after(min.getData())) min=stud[i]; } return min.toString(); } /** * Ordinamento per selezione in base all'altezza(crescente) */ public void SelectionSort() { Studente min; int p=0; for(int i=0;i<stud.length;i++) { min=stud[i]; p=i; for(int j=i+1;j<stud.length;j++) { if(stud[j].getAltezza()<min.getAltezza()) { min=stud[j]; p=j; } } stud[p]=stud[i]; stud[i]=min; } } public static int ricBinaria(int[] stud, int altezza) { int indice; int inizio; int fine; int centro; inizio = 0; fine = stud.length-1; indice = -1; while(indice == -1 && inizio <= fine) { centro = (inizio + fine) / 2; if(stud[centro] == altezza) indice = centro; else if(altezza > stud[centro]) inizio = centro +1; else fine = centro - 1; } return indice; } // public BinaryArray(int altezza) // { // stud = new Studente[altezza]; // for (int i = 0; i < altezza; i++) // } /** * Ottiene l'altezza media distinta per genere * @param genere il sesso dello studente('M' o 'F' * @return altezza media */ public double getAltezzaMedia(char genere) { int conta=0; for (int i=0;i<stud.length;i++) { if(stud[i].getGenere()==genere) { conta+=stud[i].getAltezza(); } } return conta/stud.length; } /** * Menu dell'ufficio statistiche * @return stringa */ public String getMenu() { return "================================================= ==========\n"+ "Ufficio statistiche università - Menu \n" + "================================================= ==========\n"+ "1. Visualizzare gli array degli studenti in forma tabellare \n"+ "2. Visualizzare i dati dello studente più giovane \n"+ "3. Ordinamento dell'array degli studenti per altezza \n"+ "4. Calcolo dell'altezza media distinta per genere \n"+ "5. Termina programma\n"+ "================================================= =========="; } } public class Tester { public static void main(String[] args) { Università X= new Università(); /** * Aggiunge dati di collaudo */ X.addStudente("341208","Panucci Alda",13, 10,1991, 166, 'F'); X.addStudente("140662","Lanzarote Ugo",02, 05,1990, 184, 'M'); X.addStudente("218040","Ambrosi Carla",24,03,1992, 162, 'F'); X.addStudente("210412","Bello Piera",15, 12,1992, 166, 'F'); Scanner sc= new Scanner(System.in); int scelta; do { scelta=-1; /** * Stampa menu */ System.out.println(X.getMenu()); /** * Richede la scelta all'utente */ while ((scelta<0)|| (scelta>6)) { System.out.print("Opzione numero: "); scelta=sc.nextInt(); } switch (scelta) { case 1: { System.out.println(X.getTable()+"\n\n"); };break; case 2: { System.out.println(X.getYoungest()+"\n\n"); };break; case 3: { X.SelectionSort(); System.out.println(X.getTable()+"\n\n"); };break; case 4: { System.out.print("Genere Maschile "); System.out.println(X.getAltezzaMedia('M')); System.out.print("Genere Femminile "); System.out.println(X.getAltezzaMedia('F')+"\n\n"); };break; case 5: { int position; int cercato; System.out.println("Inserire altezza da cercare"); cercato = sc.nextInt(); System.out.println(); int k; position = X.ricBinaria(null, cercato); // qui non so che fare if(position == -1) System.out.println("L'altezza " + cercato + " non è stata trovata.\n"); else System.out.println("L'altezza " + cercato + " è stata trovata"); } } } while (scelta!=6); System.out.println("Programma terminato"); sc.close(); } }