Witam,
tworzę program w Javie w środowisku NetBeans. Mam dwa wektory, jeden globalny, drugi lokalny. Wywołuję funkcję sortowania (jako identyfikator podaję jej pierwszy element z globalnego wektora), która szuka identyfikatorów w tym globalnym wektorze, spełniających pewne kryteria. Jak już ich znajdzie, dodaje ich numery do lokalnego wektora. Na końcu, przeszukuje wszystkie elementy dodane do lokalnego wektora, wywołując rekurencyjnie znów funkcję sortowania, kolejno dla elementów lokalnego wektora. Niestety, wystepuje odwołanie do nieistniejącego elementu.
Tak w uproszczeniu wygląda funkcja sortowania:
public void sortowanie(int identyfikator, int argument1, int argument2)
{
try
{
//tu tworzę wewnętrzny wektor
final Vector<Integer> mojWektor = new Vector<Integer>();
//Tutaj jest dużo linijek kodu, w których wyszukuję innych identyfikatorów
//i dodaję je do mojWektor.
if (mojWektor.size() > 0)
{
for (int i = 0; i < mojWektor.size(); i++)
{ sortowanie(mojWektor.get(i),0,0); }
}
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null,
"Wyjątek: " + e,
"Błąd funkcji",
JOptionPane.ERROR_MESSAGE);
}
}
I błąd, który wyrzuca "catch":
Exception: java.lang.ArrayIndexOutOfBoundsException: -1
Jednak dodałem parę System.out.println(mojWektor.size() + " " + i) i wygląda mi z nich tuż przed błędem:
mojWektor.size() = 9
i = 6
mojWektor.get(i) = 4
to oznacza, że wcale nie chciałem się odwołać do nieistniejącego elementu. Na co zatem innego może wskazywać ten błąd z "catch"?
Całe sortowanie znajduje się w klasie:
public class MojaBazaDanych extends Vector
Pomyślałem, że to może chodzi o zasięg tego wektora lokalnego (że wcale nie jest on taki, jak tego chciałem) i jakiś słów kluczowych może brakuje lub są użyte niewłaściwe, odnośnie zakresu zmiennej. Proszę o sugestie.
Pozdrawiam!