allora ho risolto così:
Oggetto Libretto:
Gestione dell'oggetto:codice:public class Libretto { private static final int VOTO_MINIMO = 18; private static final int VOTO_MASSIMO = 30; String materia; int voto; int crediti; public Libretto() { this.materia = inserisceMateria(); this.voto = inserisceVoto(); this.crediti = inserisciCrediti(); } /** * Inserisce la materia. * @return materia: il valore corrente della materia inserita. */ public String inserisceMateria() { System.out.println("inserisci materia"); Scanner in = new Scanner(System.in); return this.materia = in.next(); } /** * Inserisce il voto. * Controlla che il voto sia compreso tra 18 e 30, * se inferiore o superiore restituisce un valore negativo. * @return votoValido: il valore corrente del voto inserito. */ public int inserisceVoto() { System.out.println("inserisci voto"); Scanner in = new Scanner(System.in); this.voto = in.nextInt(); int votoValido; //valore di ritorno if ((this.voto >= VOTO_MINIMO) && (this.voto <= VOTO_MASSIMO)) { votoValido = this.voto; } else { votoValido = -1; } return votoValido; } /** * Inserisce i crediti. * @return crediti: il valore corrente dei crediti inseriti. */ public int inserisciCrediti() { System.out.println("inserisci crediti"); Scanner in = new Scanner(System.in); return this.crediti = in.nextInt(); } public String restituisciMateria() { return materia; } public int restituisciVoto() { return voto; } public int restituisciCrediti() { return crediti; } public boolean compareTo(Libretto libretto) { if (this.restituisciMateria().compareTo(libretto.restituisciMateria()) == 0) { if (Integer.toString(this.restituisciVoto()).compareTo(Integer.toString(libretto.restituisciVoto())) == 0) { return Integer.toString(this.restituisciCrediti()).compareTo(Integer.toString(libretto.restituisciCrediti())) == 0; } else return Integer.toString(this.restituisciVoto()).compareTo(Integer.toString(libretto.restituisciVoto())) > 0; } else return this.restituisciMateria().compareTo(libretto.restituisciMateria()) > 0; } }
Anzichè dare all'utente la possibilità di scegliere come ordinare il libretto, ho creato un metodo che ordina in base a una priorità da me stabilita, evitando di fare copie inutili del codice (ho preso spunto dai tuoi consigli).codice:public class GestioneLibretto { /* * contiene gli oggetti di tipo libretto creati dall'utente. */ Libretto[] arrLibretto; /** * Definisce la dimensione massima del libretto. * * @param dimensione * : dimensione massima inserita dall'utente. */ public void definisciDimensione(int dimensione) { arrLibretto = new Libretto[dimensione]; } /** * Popola il libretto in base alla dimensione del libretto inizializzato * dall'utente. */ public void aggiungiElementi() { for (int i = 0; i < arrLibretto.length; i++) { Libretto libretto = new Libretto(); arrLibretto[i] = libretto; } } /** * Visualizza gli elementi presenti nel libretto; Visualizza la materia, il * voto e i crediti relativi all'elemento appartenente al libretto; la * variabile "j" inizializza l'indice della lista di elementi. */ public void visualizzaElementi() { for (int i = 0, j = 1; i < arrLibretto.length; i++, j++) { System.out.println(j + ") " + arrLibretto[i].restituisciMateria() + " " + arrLibretto[i].restituisciVoto() + " " + arrLibretto[i].restituisciCrediti()); } } public void ordinaElementi() { int dimension = arrLibretto.length; int counter = 0; boolean sorted = false; while ((counter < dimension) && (!sorted)) { counter++; sorted = true; for (int i = dimension -1; i >= counter; i--) { if (arrLibretto[i - 1].compareTo(arrLibretto[i])) { swap(i,(i-1)); sorted = false; } } } } private void swap(int index1, int index2) { Libretto temp = arrLibretto[index1]; arrLibretto[index1] = arrLibretto[index2]; arrLibretto[index2] = temp; } }
Direi problema risolto, ti ringrazio Vincenzo![]()
Se hai qualche altro consiglio per come ottimizzare il software è ben accolto, grazie ancora.

Rispondi quotando