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.
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;
}
}
poi scrivi una classe :
*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