Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Ѐилософия Java3Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 24

Автор Π‘Ρ€ΡŽΡ ЭккСль

public static void main(String[] args) { Random rand = new Random(47), float f[] = new float[10], for(int i = 0; i < 10. i++)

f[i] = rand.nextFloatO, for(float x f)

System out println(x).

}

} /* Output

0.72711575

0.39982635

0.5309454

0.0534122

0.16020656

0.57799757

0.18847865

0.4170137

0.51660204

0.73734957 *///.-

Массив заполняСтся ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ for, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ для Π΅Π³ΠΎ заполнСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ индСксы. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ синтаксис ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅:

for(float X f)

Π­Ρ‚Π° конструкция опрСдСляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ… Ρ‚ΠΈΠΏΠ° float, послС Ρ‡Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ присваиваСт Π΅ΠΉ элСмСнты f.

Π›ΡŽΠ±ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ массив, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ for. НапримСр, класс String содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ toCharArray(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ массив char; ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ символов строки ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ:

//: control/ForEachString.java

public class ForEachString {

public static void main(String[] args) {

for(char с : "An African Swallow".toCharArray() ) System.out.print(c + " ");

}

} /* Output:

An African Swallow *///.-

Как Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅, «синтаксис foreachΒ» Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ интСрфСйс Iterable.

МногиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ for основаны Π½Π° ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ сСрии цСлочислСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

for (int i = 0; i < 100; i++)

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях «синтаксис foreachΒ» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ создадитС массив int. Для упрощСния этой Π·Π°Π΄Π°Ρ‡ΠΈ я Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ» Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ net.mindview.util.Range ΠΌΠ΅Ρ‚ΠΎΠ΄ range(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ массив:

//: control/ForEachlnt.java

import static net.mindview.util.Range.*,

import static net.mindview.util Print.*;

public class ForEachlnt {

public static void main(String[] args) { for(int i : range(10)) // 0..9

printnbCi +

β€ž v).

printO;

for(int

i : range(5,

10)) // 5..9

printnb(i +

printO;

for(int

i : range(5.

20. 3)) // 5

printnbCi +

printO:

}

} /* Output: 0 12 3 4 5 6 7 8 9 5 6 7 8 9 5 8 11 14 17 *///:-

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС printnb() вмСсто print(). ΠœΠ΅Ρ‚ΠΎΠ΄ printnb() Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ символ Π½ΠΎΠ²ΠΎΠΉ строки, Ρ‡Ρ‚ΠΎ позовляСт ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ строку ΠΏΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌ.

return

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π³Ρ€ΡƒΠΏΠΏΠ° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов обСспСчиваСт бСзусловный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ управлСния Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ условий. К ΠΈΡ… числу относятся ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ return, break ΠΈ continue, Π° Ρ‚Π°ΠΊΠΆΠ΅ конструкция ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΊΠ΅, аналогичная goto Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.

Π£ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова return имССтся Π΄Π²Π° прСдназначСния: ΠΎΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ возвращаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ void), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ test() ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ воспользовался Π½ΠΎΠ²Ρ‹ΠΌΠΈ возмоТностями:

//: control/IfElse2.java

import static net.mindview.util.Print.*:

public class IfElse2 {

static int test(int testval. int target) { if(testval <@062> target)

return +1; else if(testval < target) return -1;

else

return 0; // ΠžΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ значСния

}

public static void main(String[] args) { prmt(test(10. 5)); print(test(5. 10)): print(test(5. 5));

}

} /* Output: 1 -1 0

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС сСкция else Π½Π΅ Π½ΡƒΠΆΠ½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ продолТаСтся послС выполнСния инструкции return.

Если ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ void, Π½Π΅ содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ return, такая ΠΊΠΎΠΌΠ°Π½Π΄Π° нСявно выполняСтся Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ любой Ρ‚ΠΈΠΏ, ΠΊΡ€ΠΎΠΌΠ΅ void, прослСдитС Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ каТдая логичСская Π²Π΅Ρ‚Π²ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

break ΠΈ continue

Π’ Ρ‚Π΅Π»Π΅ любого ΠΈΠ· Ρ†ΠΈΠΊΠ»ΠΎΠ² Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова break ΠΈ continue. Команда break Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ†ΠΈΠΊΠ», ΠΏΡ€ΠΈ этом ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ†ΠΈΠΊΠ»Π° Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ. Команда continue останавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ шага.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΊΠΎΠΌΠ°Π½Π΄ break ΠΈ continue Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² for ΠΈ while:

//: control/BreakAndContinue.java // ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов break ΠΈ continue import static net.mindview.util.Range.*;

public class BreakAndContinue {

public static void main(String[] args) { for(int i = 0: i < 100; i++) {

if(i == 74) break; // Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°

if(i % 9 != 0) continue; // Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ итСрация

System.out print(i + " ");

}

System out.printlnO; // ИспользованиС foreach: for(int i : range(lOO)) {

if(i == 74) break; // Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°

if(i % 9 != 0) continue; // Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ итСрация

System.out.print(i + " ");

}

System.out.println(); int i = 0;

// "БСсконСчный Ρ†ΠΈΠΊΠ»": while(true) { i++;

int j = i * 27,

if(j == 1269) break; // Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°

if(i % 10 != 0) continue; 11 Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ†ΠΈΠΊΠ»Π°

System.out.print(i + " ");

}

}

} /* Output:

0 9 18 27 36 45 54 63 72 0 9 18 27 36 45 54 63 72 10 20 30 40 *///:-

Π’ Ρ†ΠΈΠΊΠ»Π΅ for пСрСмСнная i Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ достигаСт значСния 100 β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° break ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ», ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ становится Ρ€Π°Π²Π½Ρ‹ΠΌ 74. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ break ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ условиС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ достигнуто. Команда continue ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исполнСниС Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° (ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i), ΠΊΠΎΠ³Π΄Π° i Π½Π΅ дСлится Π±Π΅Π· остатка Π½Π° 9. Если Π΄Π΅Π»Π΅Π½ΠΈΠ΅ производится Π±Π΅Π· остатка, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выводится Π½Π° экран.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» for дСмонстрируСт использованиС «синтаксиса foreachΒ» с Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ.

ПослСдняя Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ дСмонстрируСт «бСсконСчный Ρ†ΠΈΠΊΠ»Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ тСорСтичСски Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π²Π΅Ρ‡Π½ΠΎ. Однако Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° вызываСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° break, которая ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ†ΠΈΠΊΠ». Команда continue ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ исполнСниС ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ Ρ†ΠΈΠΊΠ»Π°, ΠΈ ΠΏΡ€ΠΈ этом остаток Ρ†ΠΈΠΊΠ»Π° Π½Π΅ выполняСтся. (Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран Π² послСднСм Ρ†ΠΈΠΊΠ»Π΅ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i дСлится Π½Π° 10 Π±Π΅Π· остатка.) Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 выводится, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ 0 % 9 Π΄Π°Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ 0.

Вторая Ρ„ΠΎΡ€ΠΌΠ° бСсконСчного Ρ†ΠΈΠΊΠ»Π° β€” for(;;). ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ конструкции while(true) ΠΈ for(;;) ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±ΠΎΡ€ являСтся Π΄Π΅Π»ΠΎΠΌ вкуса.

ΠΠ΅Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° goto

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово goto появилось ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с языками программирования. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, бСзусловный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π·Π°Π»ΠΎΠΆΠΈΠ» основы принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π² языкС ассСмблСра: «Ссли условиС А, ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ρ‚ΡƒΠ΄Π°, Π° ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ сюда». Если Π²Π°ΠΌ доводилось Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° ассСмблСрС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ фактичСски всС компиляторы, навСрняка Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Π»ΠΈ многочислСнныС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (компилятор Java ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ свой собствСнный «ассСмблСрный» ΠΊΠΎΠ΄, Π½ΠΎ послСдний выполняСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ-машиной Java, Π° Π½Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ процСссором).

Команда goto Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ бСзусловный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ исходного тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ это ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ принСсло Π΅ΠΉ Π΄ΡƒΡ€Π½ΡƒΡŽ славу. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° постоянно Β«ΠΏΡ€Ρ‹Π³Π°Π΅Ρ‚Β» ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Π½Π΅Ρ‚ Π»ΠΈ способа Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ пСрСстало Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ Β«ΠΏΡ€Ρ‹Π³ΡƒΡ‡ΠΈΠΌΒ»? Команда goto Π²ΠΏΠ°Π»Π° Π² Π½Π°ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ Π½Π΅ΠΌΠΈΠ»ΠΎΡΡ‚ΡŒ с ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π­Π΄Π³Π°Ρ€Π° ДСйкстры «Команда GOTO Π²Ρ€Π΅Π΄Π½Π°Β» (Goto considered harmful), ΠΈΡ… Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΡ€ΠΈΡ†Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ goto стало Ρ‡ΡƒΡ‚ΡŒ Π»ΠΈ Π½Π΅ спортом, Π° Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΠΊΠΈ Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€Π°Π΄Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ€Π°Π·Π±Π΅ΠΆΠ°Π»ΠΈΡΡŒ ΠΏΠΎ ΡƒΠΊΡ€ΠΎΠΌΠ½Ρ‹ΠΌ ΡƒΠ³Π»Π°ΠΌ.

Как всСгда Π² ситуациях Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π°, сущСствуСт «золотая сСрСдина». ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π½Π΅ Π² использовании goto Π²ΠΎΠΎΠ±Ρ‰Π΅, Π½ΠΎ Π² Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΈ β€” всС ΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ goto позволяСт Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

1 ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» ΡΡ‚Π°Ρ‚ΡŒΠΈ Go Π’ΠΎ Statement considered harmful ΠΈΠΌΠ΅Π΅Ρ‚ постоянный адрСс Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅: http:// www.acm.org/classics/oct95. β€” ΠŸΡ€ΠΈΠΌΠ΅Ρ‡. Ρ€Π΅Π΄.

Π₯отя слово goto Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π² языкС Java, ΠΎΠ½ΠΎ Ρ‚Π°ΠΌ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ; Java Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ goto. Однако сущСствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° бСзусловный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΈ осущСствляСмый ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ break ΠΈ continue. Π‘ΠΊΠΎΡ€Π΅Π΅, это способ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π°, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π΅Π³ΠΎ обсуТдСния вмСстС с goto состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ β€” ΠΌΠ΅Ρ‚ΠΊΠΈ.

ΠœΠ΅Ρ‚ΠΊΠ° прСдставляСт собой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ:

label 1β€’

ЕдинствСнноС мСсто, Π³Π΄Π΅ Π² Java ΠΌΠ΅Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, β€” прямо ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅Π»ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π°. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ ΠΈ Ρ‚Π΅Π»ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π° Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° помСщСния ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅Π»ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ лишь ΠΎΠ΄Π½Π° β€” Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ конструкции Π²Ρ‹Π±ΠΎΡ€Π°. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ вСрсии break ΠΈ continue ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ», Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΈΡ… вСрсии с ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ способны досрочно Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ, Π°Π΄Ρ€Π΅ΡΡƒΠ΅ΠΌΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ:

labell:

внСшний-Ρ†ΠΈΠΊΠ» {

Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ-Ρ†ΠΈΠΊΠ» { //.

break; // 1 // .

continue; // 2 //..

continue labell; // 3 //...

break labell; // 4

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС (1) ΠΊΠΎΠΌΠ°Π½Π΄Π° break ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°, ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρƒ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС (2) ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Но Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ (3) ΠΊΠΎΠΌΠ°Π½Π΄Π° continue labell Π²Π»Π΅Ρ‡Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΈ внСшнСго Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊ ΠΌΠ΅Ρ‚ΠΊΠ΅ labell. Π”Π°Π»Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° фактичСски продолТаСтся, Π½ΠΎ с внСшнСго Ρ†ΠΈΠΊΠ»Π°. Π’ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΌ случаС (4) ΠΊΠΎΠΌΠ°Π½Π΄Π° break labell Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΌΠ΅Ρ‚ΠΊΠ΅ labell, Π½ΠΎ Π½Π° этот Ρ€Π°Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ Π² ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π΅ происходит. Π­Ρ‚ΠΎ дСйствиС останавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ†ΠΈΠΊΠ»Π° for с ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ:

//: control/LabeledFor.java

// Π¦ΠΈΠΊΠ» for с ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ

import static net.mindview.util.Print.*;

public class LabeledFor {

public static void main(String[] args) { int i = 0;

outer- // Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ нСдопустимы for(; true ,) { // infinite loop

inner: // Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ нСдопустимы for(; i < 10; i++) {

printC'i = " + i);

if(i == 2) {

print("continue"); continue;