Witam. Mam taki oto kodzik:
public class Tablica
{
//Pola prywatne
private int [] tablica2 = new int[100]; //tablica liczb uporzadkowanych od najmniejszej do najwiekszej pamietajaca do 100 liczb calkowitych
private int liczbaElementow = 0; //liczba aktualnie pamietanych elementow
//Metody
public void usun(int x) //metoda usuwajaca element x (wszystkie elementy majace wartosc x)
{
int i=0;
while(i<liczbaElementow && tablica2[i]!=x) i++; //znajduje element o indeksie i o wartosci rownej x (pierwszy taki element)
while(tablica2[i]==x) usunZK(i); //wykorzystuje fakt, ze tablica jest uporzadkowana i wszystkie elementy o wartosci x beda obok siebie
}
public void usunZK(int k) //metoda usuwajaca element o indeksie k
{
for(int i=k; k<liczbaElementow-1; i++) tablica2[i]=tablica2[i+1];
liczbaElementow--;
}
}
Zrobilem tak, by tablica2 mial jeden element - liczbe 5 na pozycji 0. Chcialem dla przykladu sprobowac ja usunac metoda usun(5). Podczas tej operacji wyskoczyl mi blad:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
at Tablica.usunZK(TablicaUporządkowana.java:40)
at Tablica.usun(TablicaUporządkowana.java:35)
Wyglada to tak jakbym probowal usunac element o indeksie 100 (co oczywiscie jest przekroczeniem zakresu tablicy, bo miesci ona tylko 100 elementow, a wiec do indeksu 99). Dlaczego w ogole petla jedzie tak daleko skoro znajduje piątkę juz na pozycji 0? Sprawdzilem, ze znajduje dobra pozycje tej liczby, a problem raczej jest z metoda usunZK
Niestety nie moge sobie poradzic ze znalezieniem gdzie jest blad. Bede wdzieczny bardzo za pomoc.
Z gory dziekuje
Pozdrawiam