Ciao è da poco che sto imparando ad implementare le intefacce iterator ed iterable.
In particolare non riesco a risolvere il seguente esercizio:
Costruisci la classe:
* abstract Persona1
La classe astratta Persona1 descrive una persona, caratterizzata
da nome, cognome.
Possiede un costruttore che permette di costruire una persona di cui
vengono specificati dagli argomenti nome e cognome.
Deve riscrivere i metodi toString e equals della classe Object.
Deve inoltre implementare l'interfaccia Comparable<Persona1> in modo tale
che le persone possano essere ordinate in ordine alfabetico (cognome poi nome).
e vabbeh fin qui (spero) tutto a posto.
poi scrivi una classe :codice:import java.util.*; abstract class Persona1 implements Comparable<Persona1>{ String nome; String cognome; Persona1(String nome,String cognome){ this.nome=nome; this.cognome=cognome; } public boolean equals(Persona1 p){ boolean b=false; if((this.nome).equals(p.nome)&&(this.cognome).equals(p.cognome)){ b=true; } return b; } public int compareTo(Persona1 p){ int x=0; int result = this.cognome.compareTo(p.cognome); int result1 = this.nome.compareTo(p.nome); x=(result<0)?-1:result ==0?0:1; return x; } public String toString(){ String s="il nome della persona è: "+nome+"\n" +"il cognome della persona è: "+cognome; return s; } }
*Genitore
Sottoclasse concreta della classe Persona1 che rappresenta una persona che puo' avere figli.Possiede un unico costruttore, che costruisce un genitore di cui vengono specificati
nome e cognome e non i figli.Oltre ai metodi ereditati dalla classe Persona1 (se occorre vanno riscritti)
deve possedere i seguenti metodi:
- public void addFiglio(Persona1 p)
La persona1 p viene aggiunta ai figli di questo genitore. Si assume p!=null.
- public void sortFigli()
Ordina i figli in ordine alfabetico.
La classe deve implementare l'interfaccia Iterable<Persona1>;
il metodo iterator deve restituire un iteratore per i figli.
ecco e qui il casino:
codice:import java.lang.*; import java.util.*; class Genitore extends Persona1 implements Iterable<Persona1> { ArrayList<Persona1> figli; Genitore(String nome,String cognome){ super(nome,cognome); figli=new ArrayList<Persona1>(); } public void addFiglio(Persona1 p){ if(p!=null){ figli.add(p); } } public void sortFigli(){ Collections.sort(figli); } public Iterator<Persona1> iterator(){ return figli.iterator(); } @Override public String toString(){ String t=""; for(int pos=0;pos<figli.size();pos++){ String t="il nome dei figli della persona sono: "+figli.get(pos); } return t; } public static void main(String[] args){ ArrayList<Persona1> i=new ArrayList<Persona1>(); Genitore p=new Genitore("elena","rossi"); Genitore p1=new Genitore("alessio","rossini"); Genitore g; Persona1 g1; g=p; g1=p1; i.add(g); i.add(g1); Collections.sort(i); for(Persona1 l:i){ System.out.println(l.toString()); } p.addFiglio(g); p.sortFigli(); System.out.println(p.toString()); } }
Il compilatore mi dà un errore sulla classe Genitore di tipo:
at java.lang.StringBuilder.append(StringBuilder.java: 115)
at Genitore.toString(Genitore.java:46)
at java.lang.String.valueOf(String.java:2826)
Dopo tutta questa spataffiata di roba mio problema è:come posso dire che la persona p viene aggiunta ai figli di questo genitore?Secondo voi i metodi che ho scritto sopra sono almento concettualmente corretti?Poi l'interfaccia iterable, la posso utilizzare all'interno di una classe senza aver implementato l'interfaccia iterator?![]()
scusate per il messaggio troppo lungo![]()


Rispondi quotando