[Java] Uso dell'iteratore "doppio" confronto tra n e n+1
Sto cercando di risolvere la seguente consegna in Java:
Dato un insieme di persone, verificare se ci sono due persone con la stessa età
Il mio problema è che non riesco a capire come impostare l'iteratore, mi spiego meglio scrivendo il codice:
public static boolean stessaeta (Set db)
{
Iteratori=db.iterator();
while(i.hasnext())
{
Persona p= i.next()
//adesso come faccio a dire all'iteratore di confrontare la persona n con la persona n+1 della lista?
//risolto questo problema mi basta solo un if
Grazie per l'aiuto.
Dato un insieme di persone, verificare se ci sono due persone con la stessa età
Il mio problema è che non riesco a capire come impostare l'iteratore, mi spiego meglio scrivendo il codice:
public static boolean stessaeta (Set
{
Iterator
while(i.hasnext())
{
Persona p= i.next()
//adesso come faccio a dire all'iteratore di confrontare la persona n con la persona n+1 della lista?
//risolto questo problema mi basta solo un if
Grazie per l'aiuto.
Risposte
Confrontare n con n+1 non è sufficiente per stabilire se ci sono o meno due persone con la stessa età. Il metodo più semplice è creare un secondo iteratore interno al ciclo e iterare su quello..
Scusami.. ma non credo sia sufficiente confrontare l'n-esima persona con la n+1-esima.. Puoi vederlo benissimo considerando l'insieme <3,1,3>.
Detto questo potresti crearti un array in cui ci metti le occorrenze delle età, altrimenti ti serve un altro for innestato: per ogni persona cerchi su tutto l'insieme se un'altra ha la stessa età tipo
Detto questo potresti crearti un array in cui ci metti le occorrenze delle età, altrimenti ti serve un altro for innestato: per ogni persona cerchi su tutto l'insieme se un'altra ha la stessa età tipo
for(Per tutte le persone dell'insieme i){ età = i.getEta(); for(Per tutte le persone dell'insieme k tranne l'i-esima){ if(k.getEta() == età) return true } }
Grazie ho Caputo. Adesso mi sorge solo UN dubbio, io non sapendo quante persons ci
Come faccio a tradurre in codice questi intervalli sull'insieme persona per il for? Sulle slide ho solo esercizi con iteratore e while.
In che senso? Come fare il for su tutte le persone? a dire la verità lo facevi già controllando i.hasNext()
Come faccio a fare questo for:
for(Per tutte le persone dell'insieme k tranne l'i-esima).
for(Per tutte le persone dell'insieme k tranne l'i-esima).
Beh ma puoi usare il for o il while, se hai capito che devi ciclare su tutte le persone puoi farlo in un modo o nell'altro
"Cronovirus":
Beh ma puoi usare il for o il while, se hai capito che devi ciclare su tutte le persone puoi farlo in un modo o nell'altro
Allora mi spiego meglio, adesso sono da pc e sono comodo.
Iterator
while(i.hasnext())
persona p=i.next()
In questo modo scorro TUTTE LE PERSONE partendo dalla persona 0.
Allora per iniziare dalla persona 1(quella successiva a 0), come devo fare?
In c avrei usando una lista con puntatore del tipo s->next->next. Qui come devo fare?
Grazie per l'aiuto.
Iteratori=db.iterator();
persona p = i.next()
while(i.hasnext())
p=i.next()
è la prima soluzione banale che puoi fare
persona p = i.next()
while(i.hasnext())
p=i.next()
è la prima soluzione banale che puoi fare
"Cronovirus":
Iteratori=db.iterator();
persona p = i.next()
while(i.hasnext())
p=i.next()
è la prima soluzione banale che puoi fare
Grazie, ho optato per questa soluzione, cosa ne pensi?
pubblc static boolean stessaeta(Set
{
boolean result=true;
int eta=0;
iterator
if(i.hasnext()){
Persona p= i.next();
eta=p.geteta().iterator().next(); //ho dei dubbi sulla sintassi di questa espressione, cosa ne pensi?
//potevo anche scrivere semplicemente eta=p.geteta()?
}
while(i.hasnext())
{
Persona p=i.next();
if(eta==p.geteta())
result=false;
}
return result;
}
"m4551":
[quote="Cronovirus"]Iteratori=db.iterator();
persona p = i.next()
while(i.hasnext())
p=i.next()
è la prima soluzione banale che puoi fare
Grazie, ho optato per questa soluzione, cosa ne pensi?
pubblc static boolean stessaeta(Set
{
boolean result=true;
int eta=0;
iterator
if(i.hasnext()){
Persona p= i.next();
eta=p.geteta().iterator().next(); //ho dei dubbi sulla sintassi di questa espressione, cosa ne pensi?
//potevo anche scrivere semplicemente eta=p.geteta()?
}
while(i.hasnext())
{
Persona p=i.next();
if(eta==p.geteta())
result=false;
}
return result;
}[/quote]
Così controlli solo che il primo elemento del set (non) abbia età uguale a qualche altra persona nel set.. Per quanto riguarda eta=p.geteta().iterator().next().. secondo me non ha senso. Hai provato ad eseguirlo?
"Cronovirus":
[quote="m4551"][quote="Cronovirus"]Iteratori=db.iterator();
persona p = i.next()
while(i.hasnext())
p=i.next()
è la prima soluzione banale che puoi fare
Grazie, ho optato per questa soluzione, cosa ne pensi?
pubblc static boolean stessaeta(Set
{
boolean result=true;
int eta=0;
iterator
if(i.hasnext()){
Persona p= i.next();
eta=p.geteta().iterator().next(); //ho dei dubbi sulla sintassi di questa espressione, cosa ne pensi?
//potevo anche scrivere semplicemente eta=p.geteta()?
}
while(i.hasnext())
{
Persona p=i.next();
if(eta==p.geteta())
result=false;
}
return result;
}[/quote]
Così controlli solo che il primo elemento del set (non) abbia età uguale a qualche altra persona nel set.. Per quanto riguarda eta=p.geteta().iterator().next().. secondo me non ha senso. Hai provato ad eseguirlo?[/quote]
Il problema è che non posso eseguirlo perchè dovrei fare i codici sorgente di ogni classe e delle gestione delle associazioni.
Non ho i mezzi per farlo.
Mi potresti scrivere un codice sorgente che risolva questa consegna in modo da prender spunto?
Ho mandato gli esercizi al professore ma non ho ricevuto risposta da giorni e non so dove mettere le mani


Credo che sia più costruttivo per te implementare realmente quello che stai scrivendo.. Se non hai voglia di creare anche la classe persona con un metodo e un campo età puoi sostituirlo con un semplice int per provarlo.
Non è giustamente un esercizio sulle classi, puoi addirittura mettere tutto nel main, crei un set di int e provi a vedere se nel set ci sono due int uguali
Non è giustamente un esercizio sulle classi, puoi addirittura mettere tutto nel main, crei un set di int e provi a vedere se nel set ci sono due int uguali
"Cronovirus":
Credo che sia più costruttivo per te implementare realmente quello che stai scrivendo.. Se non hai voglia di creare anche la classe persona con un metodo e un campo età puoi sostituirlo con un semplice int per provarlo.
Non è giustamente un esercizio sulle classi, puoi addirittura mettere tutto nel main, crei un set di int e provi a vedere se nel set ci sono due int uguali
Adesso ci provo, intanto posto le soluzioni di altri due esercizi:
//Dato un insieme di studenti, cacolare la media delle loro età
public static float media (Set
{
int eta=0;
int n=0;
float result=0;
Iterator
while(i.hasNext(){
Studente s = i.next();
n++;
}
while(i.hasNext()){
Studente s= i.next();
eta+=s.getEta();
}
result=eta/n;
return result;
}
//Dato un insieme di studenti, restituire il numero di studenti che hanno sostenuto almeno 5 esami
public static int esami (Set
{
int a=0;
Iterator
while(i.hasNext()){
Studente s = i.next();
if(s.getEsami>=5)
a++;
}
return a;
}