|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
[Java] Problema in inserimento in lista
Ciao a tutti, devo creare un metodo di nome "inserisciDopoOgni(int valore, int in)" che inserisca dopo ogni occorrenza di "valore" un nuovo elemento contenente il dato "in" nella lista di partenza.
La lista è fatta così Codice:
public class MiaLista {
private class ListElem {
private int dato;
private ListElem next = null;
public int getDato() {
return dato;
}
public void setDato(int dato) {
this.dato = dato;
}
public ListElem getNext() {
return next;
}
public void setNext(ListElem next) {
this.next = next;
}
public boolean equals(int val) {
return dato == val;
}
}
private ListElem first;
public MiaLista() {
first = null;
}
}
Codice:
public boolean inserisciDopoOgni(int valore, int in){
boolean found = false;
ListElem iterator = first;
while ((iterator.getNext()) != null)
if ((iterator.getNext()).equals(valore)) {
iterator = iterator.getNext();
ListElem elem = new ListElem();
elem.setDato(in);
elem.setNext(iterator.getNext());
iterator.setNext(elem);
found = true;
}
else
iterator = iterator.getNext();
return found;
}
Ultima modifica di gigippa : 08-09-2008 alle 14:35. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Codice:
public boolean inserisciDopoOgni(int valore, int in){
boolean found = false;
ListElem iterator = first;
while ((iterator.getNext()) != null)
if ((iterator.getNext()).equals(valore)) {
iterator = iterator.getNext();
ListElem elem = new ListElem();
elem.setDato(in);
elem.setNext(iterator.getNext());
iterator.setNext(elem);
found = true;
}
else
iterator = iterator.getNext();
return found;
}
All'inizio fai puntare "iterator" al primo elemento ("first") della lista. Bene. Però poi inizi la ricerca dal secondo elemento, di fatto non controllando se il primo combacia con il valore che stai cercando (infatti l'if che verifica la condizione non controlla il valore di "first" perchè chiama iterator.getNext() e controlla quindi il valore a partire dal secondo elemento). Inoltre c'è un secondo errore di semantica: Codice:
while ((iterator.getNext()) != null) Ti consiglio di includere sempre le parentesi, anche per istruzioni che non ne hanno strettamente bisogno, per ragioni di chiarezza nella lettura del codice; in questo modo è più facile rileggere velocemente quello che scrivi e hai meno possibilità di commettere errori, specie se devi editare il codice più volte. (Cmq va a gusti). Codice:
public boolean inserisciDopoOgni(int valore, int in)
{
boolean found = false;
ListElem iterator = first;
while ((iterator.getNext()) != null)
{
if ((iterator.getNext()).equals(valore))
{
iterator = iterator.getNext();
ListElem elem = new ListElem();
elem.setDato(in);
elem.setNext(iterator.getNext());
iterator.setNext(elem);
found = true;
}
else
{
iterator = iterator.getNext();
}
}
return found;
}
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:34.



















