Nie zagłębiałem się w zadanie, ale patrząc na kod mogę powiedzieć, ze tu leży problem:
if (tab[y] == null)
Przy wykonywaniu tab[y] wyrzucany jest wyjątek ArrayIndexOutOfBoundsException (a nie Bundle...) i nie dochodzi do porównania.
Lepiej weź pod uwagę rozmiar tabeli i zakres y:
if (y >= 0 && y < tab.length && tab[y] == null)
BTW Niepotrzebnie przypisujesz i do y.
Przypominam, że sprawdzanie warunków w Javie odbywa się od lewej do prawej. Jeśli, któryś z poprzednich zawiedzie i wiadomo, że cały warunek nie zostanie spełniony (np. true && false && ?), ten ostatni nie będzie sprawdzany i nie dostaniemy owego wyjątku.