Jak zabezpieczyć się przed wyjściem poza tablicę dwuwymiarową?

0

Witam,

Mam taki problem: potrzebuję porównać ze sobą element tablicy wraz z elementami otaczającymi go, czyli na górze, po lewej, na dole i po prawej stronie. Sprawa jest prosta, jeśli element jest otaczany przez pozostałe, ale jeśli zaczynamy od brzegu lewego-górnego, to wtedy nie mamy nic po lewej i na górze...Jak zabezpieczyć się przed taką sytuacją?

for (a = 0; a < wiersze, a++){
	for (b = 0; b < kolumny, b++){
		tab[a][b-1] - element po lewej - tu już mamy OutOfBounds
		tab[a][b+1] - element po prawej
		tab[a-1][b] - element na górze - tu też
		tab[a+1][b] - element na dole
	}
}
0

Zależy co chcesz zrobić. Czy tablica jest "sferą", tzn. czy "zawija" się na brzegach, czy może jeśli element jest na krawędzi, to elementy "wystające" zawsze są takie same. Opisz dokładniej.

0

Skorzystaj z tab.length oraz tab[i].length https://ideone.com/UCppRj

EDIT: być może nie zrozumiałem zagadnienia ;) Ale post zostawię, bo może będzie Ci pomocny.

0

Tablica ma pewną stałą ilość wierszy i kolumn. Wygląda mniej więcej tak:

22 15 24 24 26 22 23 18 15 15 26 24 20
26 26 20 20 14 13 24 16 24 17 18 24 14
13 23 18 18 25 25 13 20 13 11 21 17 18
15 14 19 12 17 15 25 24 15 21 21 19 19

I teraz zaczynając od:

tab[0][0]

...czyli 22 w tym przypadku, nie mogę odnieść się do:

tab[a][b-1]
tab[a-1][b]

...gdyż będzie OutOfBounds.

0

Udaj że tych elementów nie ma (czyli gdy masz po nie sięgnąć to nie sięgaj bo ich nie ma).
W Twoim przykładzie nie wiadomo co to oznacza bo nie masz żadnego przypisania.

0

Ale muszę się do nich odnieść wchodząc do pętli od początku tablicy...muszę przejść przez całą tablicę porównując sąsiadujące elementy po lewej, po prawej, na górze i na dole, zaczynając od pierwszego...to wszystko mam w jednej pętli zewnętrznej i wewnętrznej...4 instrukcje IF, po jednej dla każdej strony.

0

Iteruj po tablicy od 1?

0
carlosmay napisał(a):

Iteruj po tablicy od 1?

OK, a jak porównasz elementy na brzegach i rogach z sąsiadami?

0
for (a = 0; a < wiersze, a++){
    for (b = 0; b < kolumny, b++){
	
		if(a+1<wiersze)
		{
		tab[a+1][b] - element na dole
		}
		if(a-1>=0))
		{
		tab[a-1][b] - element na górze - tu też
		}
		if(b-1>=0)
		{
		tab[a][b-1] - element po lewej - tu już mamy OutOfBounds
		}
		if(b+1<kolumny)
		{
		tab[a][b+1] - element po prawej
		}
		 
    }
}
0
gk1982 napisał(a):
for (a = 0; a < wiersze, a++){
    for (b = 0; b < kolumny, b++){
	
		if(a+1<wiersze)
		{
		tab[a+1][b] - element na dole
		}
		if(a-1>=0))
		{
		tab[a-1][b] - element na górze - tu też
		}
		if(b-1>=0)
		{
		tab[a][b-1] - element po lewej - tu już mamy OutOfBounds
		}
		if(b+1<kolumny)
		{
		tab[a][b+1] - element po prawej
		}
		 
    }
}

Hehe, rozwiązanie było na widoku :) Że też na to nie wpadłem...dzięki!

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