Re: Help with vector problem



Petterson Mikael wrote:
Hi,

We get an java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1 on the following line:

Object tmp = moDataTable.get(i + 1);
The following trace:

System.out.println("MAX:moDataTable is empty");

does not show on the console so it is not empty and it should not enter the loop.


Any ideas what could be wrong?
Quite a bit really:

cheers,

//mikael

My code:

private Vector moDataTable;


public synchronized void add(Object moData) {
if ((moData != null) && (moData instanceof MoData)) {
for (int i = 0; i < moDataTable.size(); i++) {
if (moDataTable.isEmpty()) {
System.out.println("MAX:moDataTable is empty");
}
This loop steps though the entire Vector and calls the same isEmpty() method for every element! You do realize that isEmpty() checks to see if the whole Vector is empty, not that a particular element is null.

Object tmp = moDataTable.get(i + 1);
This gets the (i+1)th element from the Vector - so it stands to reason that on the last iteration it will trying to get an element 1 greater than the size of the Vector - hence your exception.

if (tmp instanceof MoData) {
if (((MoData) tmp).getLocalDistinguishedName().equals(((MoData)

moData)

.getLocalDistinguishedName())) {
System.out.println("WARNING!!: there was attempt to add MoData with duplicate LDN, ignoring, "
+ ((MoData) moData)
.getLocalDistinguishedName());
You aren't attempting to add anywhere - just get.
return;
}
}
}
}
}
I think you need to step back and try to work out what you're trying to do.

Mark
.