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:
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).
Questa è la classe Persona:
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 ();
}
}
e questa la mia soluzione:
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;
}
}
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();
}
}
}
Che funziona, ma è inutilmente lunga e contorta, e peggio ancora non funzionerebbe con più dipendenti.
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?
codice:
private Persona[] dipendenti;
Nel costruttore lo inizializzo:
codice:
this.dipendenti = new Dipendente1[100]; //numero massimo di dipendenti a caso
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?
Ho ipotizzato, provando varie cose su eclipse, una soluzione del genere:
codice:
public boolean guadagnaDiPiu2(Persona dipendente){ if (this.stipendio > stipendio) {
return true;
}
else return false;
}
}
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.
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 comprendere
spero di non aver posto domande troppo stupide e vi ringrazio in anticipo per la vostra disponibilità ^_^