Salve a tutti, scrivo perché ho dei problemi con degli esercizi di java, e credo che questo sia dovuto alla mia mancata comprensione dell'utilizzo dei costruttori e degli array di oggetti.
Dato l'esercizio:
Questa è la classe Persona:Scrivere una classe Dipendente che estende la classe Persona vista a lezione. Ogni dipen-dente ha un proprio anno di assuzione e un proprio stipendio. Si deniscano costruttori e vari metodi
get e set opportuni. Si ridenisca inoltre il metodo visualizza() opportunamente. Si denisca inoltre
un metodo guadagnaPiuDi che prende come parametro un altro oggetto Dipendente e restituisce true
se l'oggetto corrente ha uno stipendio maggiore di quello ricevuto come parametro, o false altrimenti.
Per testare la classe, scrivere un programma UsaDipendente che crea tre oggetti della classe Dipendente
e li visualizza in ordine di stipendio (usando il nuovo metodo per confrontare gli stipendi).
e questa la mia soluzione:codice:public class Persona {private String nome ; // nome e cognome private String indirizzo ; // indirizzo // costruttore public Persona ( String nome , String indirizzo ) { this . nome = nome ; this . indirizzo = indirizzo ; } public String getNome () { return nome ; } public String getIndirizzo () { return indirizzo ; } public void setIndirizzo ( String indirizzo ) { this . indirizzo = indirizzo ; } // visualizza i dati della persona public void visualizza () { System . out . println (" Nome : " + nome ); System . out . println (" Indirizzo : " + indirizzo ); System . out . println (); } }
codice:public class Dipendente extends Persona { private int annoAss; private int stipendio; //array che contiene i dipendenti //private Persona[] dipendenti; //costruttore dei dipendenti public Dipendente(String nome, String indirizzo, int annoAss, int stipendio) { super(nome, indirizzo); this.annoAss = annoAss; this.stipendio = stipendio; } public int getAnnoAss() { return annoAss; } public int getStipendio() { return stipendio; } public void visualizza() { System.out.println (" Nome: Dipendente " + getNome ()); System.out.println (" Indirizzo: " + getIndirizzo ()); System.out.println (" Anno di assunzione: " + annoAss); System.out.println (" Stipendio: " + stipendio); System.out.println (); } /*metodo guadagnaPiuDi che prende come parametro un altro oggetto Dipendente e restituisce true se l'oggetto corrente ha uno stipendio maggiore di quello ricevuto come parametro, o false altrimenti.*/ public boolean guadagnaPiuDi(int a, int b){ if (a > b) { return true; } else return false; } }Che funziona, ma è inutilmente lunga e contorta, e peggio ancora non funzionerebbe con più dipendenti.codice:public class UsaDipendente { public static void main (String[] args){ Dipendente d1 = new Dipendente("Mario Rossi", "via Inghilterra 12", 2009, 1400); Dipendente d2 = new Dipendente("Luigi Bianchi", "via Danimarca 23", 2005, 1700); Dipendente d3 = new Dipendente("Peach Rosa", "via Svezia 34", 2012, 1500); if (d1.guadagnaPiuDi(d1.getStipendio(), d2.getStipendio()) && d1.guadagnaPiuDi(d1.getStipendio(), d3.getStipendio()) && d2.guadagnaPiuDi(d2.getStipendio(), d3.getStipendio())){ d1.visualizza(); d2.visualizza(); d3.visualizza(); } else if (d1.guadagnaPiuDi(d1.getStipendio(), d3.getStipendio()) && d3.guadagnaPiuDi(d3.getStipendio(), d2.getStipendio()) && d1.guadagnaPiuDi(d1.getStipendio(), d2.getStipendio())){ d1.visualizza(); d3.visualizza(); d2.visualizza(); } else if (d2.guadagnaPiuDi(d2.getStipendio(), d1.getStipendio()) && d1.guadagnaPiuDi(d1.getStipendio(), d3.getStipendio()) && d2.guadagnaPiuDi(d2.getStipendio(), d3.getStipendio())){ d2.visualizza(); d1.visualizza(); d3.visualizza(); } else if (d2.guadagnaPiuDi(d2.getStipendio(), d1.getStipendio()) && d2.guadagnaPiuDi(d2.getStipendio(), d3.getStipendio()) && d3.guadagnaPiuDi(d3.getStipendio(), d1.getStipendio())){ d2.visualizza(); d3.visualizza(); d1.visualizza(); } else if (d3.guadagnaPiuDi(d3.getStipendio(), d1.getStipendio()) && d3.guadagnaPiuDi(d3.getStipendio(), d2.getStipendio()) && d1.guadagnaPiuDi(d1.getStipendio(), d2.getStipendio())){ d3.visualizza(); d1.visualizza(); d2.visualizza(); } else { d3.visualizza(); d2.visualizza(); d1.visualizza(); } } }
Cosa so di star sbagliando: per risolvere un esercizio del genere ovviamente devo utilizzare un loop su di un array di oggetti per ordinarlo, però proprio non capisco come fare, e sto andando a casaccio. Continuo a rileggere le lezioni e nel libro, cerco esempi ma non ne vengo a capo.
Io devo creare nella mia classe Dipendente che estende Persona un array che contenga gli oggetti dipendenti, giusto?
Nel costruttore lo inizializzo:codice:private Persona[] dipendenti;
Nel mio metodo guadagnaPiuDi devo far capire al compilatore che voglio prendere due oggetti dipendente e confrontarli tra loro, restituendo true o false a seconda del risultato del confronto: come faccio a dirgli che voglio selezionare due oggetti dipendente?codice:this.dipendenti = new Dipendente1[100]; //numero massimo di dipendenti a caso
Ho ipotizzato, provando varie cose su eclipse, una soluzione del genere:
ma non mi sembra sensato (il compilatore tra cosa fa i confronti??), e comunque in questo modo ho difficoltà a scrivere una soluzione per UsaDipendenti.codice:public boolean guadagnaDiPiu2(Persona dipendente){ if (this.stipendio > stipendio) { return true; } else return false; } }
Avete suggerimenti, fonti dalla quale posso trarre esempi, approfondimenti (anche in inglese) che dovrei leggere? Perché sto cercando ma non trovo niente di utile per aiutarmi a comprenderespero di non aver posto domande troppo stupide e vi ringrazio in anticipo per la vostra disponibilità ^_^

spero di non aver posto domande troppo stupide e vi ringrazio in anticipo per la vostra disponibilità ^_^
Rispondi quotando
