Znalezienie błędu w prostym kodzie

0

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

1

tutaj: while (tablica2[i]==x) powinienes sprawdzic warunek: (i<liczbaElementow), poza tym warunek tutaj:
for(int i=k; k<liczbaElementow-1; i++) tablica2[i]=tablica2[i+1];
powinno być:
i<liczbaElementow-1
lub:
for(; k<liczbaElementow-1; k++) tablica2[k]=tablica2[k+1];

0

Ok wszystko teraz dziala. Dzieki wielkie!

0

ja bym radził nauczyć się korzystać z debuggera, bo nie każdy błąd(tak jak tutaj) dostrzeżesz gołym okiem...

1 użytkowników online, w tym zalogowanych: 0, gości: 1