PDA

Visualizza la versione completa : [java] indice del vettore


piccolanomade
26-11-2003, 11:26
Come faccio a recuperare l'indice dell'elemento su cui sono posizionata?
io ho:

int ind = 0;
vec = new Vector(20);

Enumeration vecE = vec.elements();

while(vecE.hasMoreElements()) {
ind = vec.indexOf(vecE.nextElement());
if (vecE.nextElement().equals("T")) {
...
}
}

Ma si blocca nel calcolo di "ind", dice Invalid Cursor Position

LeleFT
26-11-2003, 12:37
Perchè passi per l'Enumeration?
Puoi usare un modo più semplice e "veloce": sapendo che gli indici degli array partono da 0, puoi tenerti una variabile contatore:


int contatore = 0;

while (contatore < vec.size()) {
Object oggetto = vec.elementAt(contatore);
if (((Eventuale_Casting) oggetto).equals(test)) {
// fai quello che devi fare
}
contatore++; // faccio avanzare il contatore
}

In questo modo tu sai sempre che l'oggetto che stai controllando ha come indice 'contatore' all'interno del Vector.
Per sapere se sei alla fine del Vector basta controllare che questo indice non superi vec.size() (che ti dà proprio il numero di elementi contenuti nel vettore).


Ciao.

piccolanomade
26-11-2003, 12:40
il mio caso è un po' più complicato....
ti posto il codice.... ok?

LeleFT
26-11-2003, 12:41
Ok... posta il codice. :D

piccolanomade
26-11-2003, 12:43
boolean flag = true;
Enumeration vRuoliE = vRuoli.elements();
Enumeration vNomiE = vNomi.elements();

System.err.println("Fatta enumerazione");

while(vRuoliE.hasMoreElements() && flag) {
System.err.println("elemento ruoli: " + vRuoliE.nextElement());
ind = vRuoli.indexOf();
System.err.println("indice: " + ind);

if (vRuoliE.nextElement().equals("T")) {
nomeOK = (String) vNomi.elementAt(ind);
flag = false;
} else {
if (vRuoliE.nextElement().equals("C")) {
nomeOK = "Più Cointestatari";
flag = false;
} else {
nomeOK = "";
}
}
}


l'enumerazione è per fare il ciclo....

piccolanomade
26-11-2003, 12:54
Come system.err.println

visualizzo:

Chiavi diverse
Fatta enumerazione
elemento ruoli: C
indice: -1
nome: Più Cointestatari
Errore di tipo: 63 > 0 in Filtro Records
MonitorFilter::ServletException
MonitorFilter::A web application object caused an exception
MonitorFilter::javax.servlet.ServletException: java.sql.SQLException: Invalid Cursor position
at ActionServlet.service(ActionServlet.java:93)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:853)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:193)
at org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:226)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:243)

LeleFT
26-11-2003, 13:02
Prima di tutto una domanda personale: perchè indirizzi l'output sullo standard error invece dello standard output? Il risultato non cambia, però sono affezionato a System.out.println().. :D

Poi il codice. Si può evitare di usare l'Enumeration, usando appunto un contatore di indice:


int contatore = 0;
boolean flag = true;

while((contatore < vRuoli.size()) && flag) {
System.err.println("elemento ruoli: " + vRuoli.elementAd(contatore));
System.err.println("indice: " + contatore);

if (((String)vRuoli.elementAt(contatore)).equals("T")) {
nomeOK = (String) vNomi.elementAt(contatore);
flag = false;
} else {
if (((String)vRuoli.elementAt(contatore)).equals("C")) {
nomeOK = "Più Cointestatari";
flag = false;
} else {
nomeOK = "";
}
}
}


Se non sbaglio, nextElement() si posiziona sul primo elemento (la prima volta), ma la seconda volta che lo chiami, avanza all'elemento successivo. Per questo conviene fare tutto con i Vector senza passare per le Enumeration (hanno sicuramente i loro pregi, non dico di no).

Ciao.

piccolanomade
26-11-2003, 13:07
Sai i Java non l'ho mai studiato... faccio quello che mi hanno insegnato... e io tra tutt'e due preferisco gli output su file...
cmq provo a fare come dici tu...
Anche a me è venuto il dubbio che con nextElement() andasse avanti... infatti non ero mica tanto convita....
Lo provo subito così ti faccio sapere.

piccolanomade
26-11-2003, 13:20
mi da lo stesso errore:

Chiavi diverse
elemento ruoli: C
indice: 0
nome: Più Cointestatari
Errore di tipo: 63 > 0 in Filtro Records
Rilascio connessione: 0
MonitorFilter::ServletException
MonitorFilter::A web application object caused an exception
MonitorFilter::javax.servlet.ServletException: java.sql.SQLException: Invalid Cursor position

piccolanomade
26-11-2003, 13:24
l'errore non sta lì!!

Loading