Gyakorlati alapok
A kapcsos zárójel-probléma
Az előző, Ágyazzunk be a for ciklusnak! (az egybeágyazott for ciklusok) című fejezet egybeágyazott for ciklusok működését mutatta meg, amely során a kódban több kódszint is keletkezett, azaz létrejöttek külső és belső ciklusszintek. Nevezhetjük ezeket műveleti blokkszinteknek is. Bevezetésképpen ismételjük meg az egyik ilyen többszintű kódot:
-
(fő) ciklus - F
-
(1. belső) ciklus - B
-
(2. belső) ciklus - BB
-
(3. belső) ciklus - BBB
public class Main {
public static void main(String[] args) {
for(int i = 1; i <= 3; i++){
System.out.print("F" + i + " ");
for(int j = 1; j <= 3; j++){
System.out.print("B" + i + " ");
for(int k =
1; k <= 3; k++){
System.out.print("BB" + i + " ");
for(int l = 1; l <= 3; l++){
System.out.print("BBB" + i + " ");
}
}
}
}
}
}
Végeredmény főciklusonként szétbontva:
-
F1
-
B1
-
BB1
-
BBB1 BBB1 BBB1
-
BB1
-
BBB1 BBB1 BBB1
-
BB1
-
BBB1 BBB1 BBB1
-
B1
-
BB1
-
BBB1 BBB1 BBB1
-
BB1
-
BBB1 BBB1 BBB1
-
BB1
-
BBB1 BBB1 BBB1
-
B1
-
BB1
-
BBB1 BBB1 BBB1
-
BB1
-
BBB1 BBB1 BBB1
-
BB1
-
BBB1 BBB1 BBB1
1 db főciklus-sorozat tehát 22 ciklusból áll. A további sorozat:
-
F2 B2 BB2 BBB2 BBB2 BBB2 BB2 BBB2 BBB2 BBB2 BB2 BBB2 BBB2 BBB2 B2 BB2 BBB2 BBB2 BBB2 BB2 BBB2 BBB2 BBB2 BB2 BBB2 BBB2 BBB2 B2 BB2 BBB2 BBB2 BBB2 BB2 BBB2 BBB2 BBB2 BB2 BBB2 BBB2 BBB2
-
F3 B3 BB3 BBB3 BBB3 BBB3 BB3 BBB3 BBB3 BBB3 BB3 BBB3 BBB3 BBB3 B3 BB3 BBB3 BBB3 BBB3 BB3 BBB3 BBB3 BBB3 BB3 BBB3 BBB3 BBB3 B3 BB3 BBB3 BBB3 BBB3 BB3 BBB3 BBB3 BBB3 BB3 BBB3 BBB3 BBB3
A kódszinteket a kapcsos zárójelek mutatják meg (square braces vagy square brackets), amelyek elsődleges feladata tehát a műveleti blokkok behatárolása. Nézzük meg a fenti kód szintjeit csakis kapcsos zárójelekkel:
{
{
{
{
{
{
}
}
}
}
}
}
Jól látható, hogy a kapcsos zárójelek mindig párban vannak (1 nyitó + 1 záró). Ha azonban a blokkokat rosszul határoljuk, akkor valahonnan hiányozni fog egy nyitó vagy záró kapcsos zárójel. Ez szinte az egyik legtipikusabb fordítási hibát fogja eredményezni. A hiba fennállásáig a kódot nem is tudjuk futtatni, a hibaüzenet egy piros körön belül fehér x és a következő szöveg lesz:
Syntax error, insert "}" to complete ClassBody.
A hiba megoldására több lehetőségünk is van:
-
az Eclipse rendelkezik némi kódautomatikával, tehát ha blokkot kezdünk egy nyitó kapcsos zárójellel ({), akkor legtöbbször inzertál egy zárót is (}),
-
lehetőségünk van egész műveleti blokkok automatikus inzertálására is a Source - Surround With parancsok kiadásával,
-
s talán a legpraktikusabb megoldás: adott záró kapcsos zárójel fölé helyezve a kurzort, sárga téglalapban meg fog jelenni az egész behatárolt műveleti blokk.