PDA

Visualizza la versione completa : [JAVA] Scambiare due elementi di una lista


Kamui
28-01-2006, 16:31
Ciao,
sto semplicemente cercando di scambiare tra loro due elementi in una lista. L'utente sceglie l'elemento da spostare e la posizione in cui spostarlo (newPos), io mi preoccupo di pigliare l'elemento attualmente nella nuova posizione e di metterlo nella posizione attuale di quello scelto (curPos) dopo aver messo quello scelto in newPos.
Quello che accade che il programma non funziona, mi si pianta la servlet (pagina bianca) e non ho alcun messaggio d'errore da spulciare.

Qui la parte di codice incriminata:


iterator = sortedList.listIterator();
int curPos = 0;
Element tmpEl = (Element)sortedList.get(newPos);
while (iterator.hasNext()) {
image = (Element)iterator.next();
// se l'img all'interno della lista quella che l'utente vuole spostare
if (...) {
curPos=iterator.previousIndex();
sortedList.set(newPos,image);
sortedList.set(curPos,tmpEl);
}
}


Grazie... :bh:

bobc
28-01-2006, 17:31
Se lei gli passa gli indici di scambio attaverso una form (ovvero curPos e newPos sono note) e deve scambiare SOLO due elementi dovrebbe bastare un semplice scambio :



Element tmpEl = (Element)sortedList.get(newPos);
sortedList.set(newPos,(Element)sortedList.get(curP os));
sortedList.set(curPos,tmpEl);


:bh:

Kamui
28-01-2006, 17:34
E` pi o meno quello che ho fatto, l'unica differenza che curPos non lo conosco ma me lo ricavo conoscendo l'immagine che vuole spostare... con il ListIterator scorro tutti gli elementi e quando trovo l'immagine che combacia ne estraggo la posizione.
Poi scambio.
E non funziona. :(

bobc
28-01-2006, 17:44
Se conosci newPos e non curPos



iterator = sortedList.listIterator();
int curPos = 0;
Element tmpEl = (Element)sortedList.get(newPos);
while (iterator.hasNext()) {
image = (Element)iterator.next();
// se l'img all'interno della lista quella che l'utente vuole spostare
if (...) {
curPos=iterator.nextIndex();
}
}//end while
sortedList.set(newPos,(Element)sortedList.get(curP os));
sortedList.set(curPos,tmpEl)


cos dovrebbe andare.

bobc
28-01-2006, 17:50
Se nn va mi pu postare la condizione dell'if?

Kamui
28-01-2006, 18:29
previousIndex() dovrebbe essere corretto, anche spostando fuori dal while le istruzioni di set ottengo lo stesso pagina bianca.
Ho pensato a qualche puntatore che punta al vuoto, ma dove? Sono proprio le due istruzioni di set a dare il problema e nessuna contiene riferimenti al vuoto.
Nella condizione dell'if c' un confronto tra un parametro ricevuto in querystring e il valore di un campo nel database XML:



if (image.getChildText("url").equals(imageName)) {
[...]
}


Il programma entra nell'if, ho fatto delle prove facendogli stampare dei valori, e individua correttamente i due indici curPos e newPos.
Il problema sta proprio nelle istruzioni di set :bh: idee?

Grazie.

Loading