JavaRush /Java blogi /Random-UZ /O'tish operatorlari
articles
Daraja

O'tish operatorlari

Guruhda nashr etilgan
Java uchta o'tish operatorini qo'llab-quvvatlaydi break- continueva return. Ular boshqaruvni dasturingizning boshqa qismiga o'tkazadilar. Keling, har bir operatorni batafsil ko'rib chiqaylik. O'tish operatorlari - 1

Operatordan foydalanishbreak

Java tilidagi operator breakuchta holatda qo'llaniladi. Birinchidan, siz allaqachon ko'rganingizdek, u bayonot filiallaridagi bayonotlar ketma-ketligini tugatadi switch. Ikkinchidan, u halqadan chiqib ketish uchun ishlatilishi mumkin. Uchinchidan, u shartsiz o'tish operatorining "tsivilizatsiyalashgan" shakli sifatida ishlatilishi mumkin goto. Ushbu bo'lim oxirgi ikki holatni tushuntiradi. breakDavradan chiqish uchun foydalaning dan foydalanib break, shartli ifodani va tsikl tanasidagi qolgan kodlarni chetlab o‘tib, tsiklni darhol tugatishga majbur qilishingiz mumkin. Agar sikl ichida bayonot breakuchrasa, ikkinchisi tugaydi va dastur boshqaruvi undan keyingi gapga o'tadi. Oddiy misol:
// Использование break для выхода из цикла.
public class BreakLoop {

  public static void main(String[] args) {
    for (int i = 0; i < 100; i++) {
      if (i == 4) {
        break; // завершить цикл, если i = 4
      }
      System.out.println("i: " + i);
    }
    System.out.println("Цикл завершен.");
  }
}
Ushbu dastur quyidagi chiqishni yaratadi:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Bu yerda sikl for0 dan 99 martagacha bo'lgan ko'rsatmalarni bajarish uchun mo'ljallangan bo'lsa-da, operator breaki 4 bo'lganda uni erta tugatadi. Operatordan breakJava-ning istalgan tsikllari, jumladan ataylab cheksiz tsikllar bilan foydalanish mumkin. Misol uchun, quyida pastadir yordamida kodlangan oldingi dastur mavjud while. Ushbu dasturning chiqishi avvalgisi bilan bir xil.
// Использование break для выхода из while-цикла.
public class BreakLoop2 {

  public static void main(String[] args) {
    int i = 0;
    while (i < 100) {
      if (i == 4) {
        break; // закончить цикл, если i = 4
      }
      System.out.println("i: " + i);
      i++;
    }
    System.out.println("Цикл завершен.");
  }
}
Ichimli tsikllar to'plamida foydalanilganda, bayonot breakfaqat eng ichki tsikldan chiqadi. Masalan:
// Использование break во вложенных циклах.
public class BreakLoop3 {

  public static void main(String[] args) {
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 10; j++) {
        if (j == 4) {
          break; // закончить цикл, если j = 4
        }
        System.out.print(j + " ");
      }
      System.out.println();
    }
    System.out.println("Цикл завершен.");
  }
}
Ushbu dastur quyidagi chiqishni yaratadi:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Ko'rib turganingizdek, breakichki tsikldagi bayonot faqat o'sha tsiklning tugashiga olib keladi. Tashqi halqa ta'sir qilmaydi. Keling, bu borada yana ikkita fikr bildiraylik break. Birinchidan, tsiklda bir nechta iboralar paydo bo'lishi mumkin break. Biroq, ehtiyot bo'ling. Ularning ko'pchiligi sizning kodingizni buzishga moyildir. Ikkinchidan, break- operatorini tugatuvchi switch, faqat berilgan switch- operatorga ta'sir qiladi (uni o'z ichiga olgan tsikllarga emas). Izoh: Breakloopni tugatishning oddiy vositasi sifatida ishlab chiqilmagan. Bu maqsadga halqa sarlavhasining shartli ifodasi xizmat qiladi. Operator breakfaqat muayyan maxsus vaziyatlar yuzaga kelganda halqani buzish uchun ishlatilishi kerak.

breakShakl sifatida foydalaninggoto

Kommutator iboralari va sikllarida ishlatilishidan tashqari , breaku ning "sivilizatsiyalashgan" shakli sifatida ham ishlatilishi mumkin goto. Java operatorni o'z ichiga olmaydi, gotochunki u filialni o'zboshimchalik bilan va tuzilmagan tarzda bajaradi. dan intensiv foydalanadigan kodni gototushunish va saqlash odatda qiyin. Bundan tashqari, ba'zi kompilyator optimallashtirishlarini bekor qiladi. Biroq, dasturda gotoboshqaruv oqimi qimmatli va qonuniy tuzilma bo'lgan bir nechta joylar mavjud. Misol uchun, gotosiz chuqur o'rnatilgan halqalar to'plamidan chiqib ketganingizda foydali bo'lishi mumkin. Bunday vaziyatlarni hal qilish uchun Java operatorning kengaytirilgan shaklini belgilaydi break. Undan foydalanib, siz bir yoki bir nechta kod bloklaridan chiqishingiz mumkin. Ushbu bloklar loop yoki bayonotning bir qismi bo'lishi shart emas switch. Bu har qanday blok bo'lishi mumkin. Keyinchalik, ijroning qayerda davom etishini aniq belgilashingiz mumkin, chunki bu shakl breakbelgi bilan ishlaydi va uning muammolarini chetlab o'tib, afzalliklarini ta'minlaydi goto. Yorliqli breakbayonot quyidagi umumiy shaklga ega: break label; Bu erda labelkod blokini aniqlaydigan yorliqning nomi. Ushbu shakl breakbajarilganda, boshqaruv nomlangan kod blokidan (kodning yorlig'i bayonotda ko'rsatilgan break) ushbu blokdan keyingi operatorga o'tkaziladi. Belgilangan kod bloki ushbu bayonotni o'z ichiga olishi kerak break, lekin bu qo'shilish to'g'ridan-to'g'ri bo'lishi shart emas (ya'ni, breakuni to'g'ridan-to'g'ri o'z yorlig'i bo'lgan blokga emas, balki uning ichiga joylashtirilgan blokga kiritish mumkin, balki belgilangan bo'lishi mumkin) . breakBu ichki bloklar to'plamidan qochish uchun belgilangan operatordan foydalanishingiz mumkinligini anglatadi . breakLekin siz ni o'z ichiga olmagan kod blokidan foydalana olmaysiz break. Blokka nom berish uchun blokning boshiga (ochiladigan jingalak qavs oldidan) yorliq qo'ying. Yorliq har qanday yaroqli Java identifikatoridan keyin ikki nuqtadan iborat. Blokni belgilagandan so'ng, uning yorlig'i operatorga argument sifatida ishlatilishi mumkin break. Bu bajarilish belgilangan blokning oxiridan davom etishiga olib keladi. Masalan, quyidagi dastur uchta ichki blokni o'z ichiga oladi, ularning har biri o'z yorlig'iga ega. Operator breakoldinga siljiydi, yorliq bilan belgilangan blokning oxiridan tashqarida second, ikkita operatorni o'tkazib yuboradi println().
// Использование break How цивorзованной формы goto.
public class Break {

  public static void main(String[] args) {
    boolean t = true;
    first:
    {
      second:
      {
        third:
        {
          System.out.println("Перед оператором break.");
          if (t) {
            break second; // выход из блока second
          }
          System.out.println("Данный оператор никогда не выполнится");
        }
        System.out.println("Данный оператор никогда не выполнится ");
      }
      System.out.println("Данный оператор размещен после блока second.");
    }
  }
}
Ushbu dasturni ishga tushirish quyidagi natijani yaratadi:
Перед оператором break.
Данный оператор размещен после блока second.
Belgilangan operatorning eng keng tarqalgan qo'llanilishidan biri breakichki o'tkazgichlardan qochishdir. Masalan, quyidagi dasturda tashqi sikl faqat bir marta bajariladi:
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 100; j++) {

        if (j == 10) {
          break outer; // выйти из обоих циклов
        }
        System.out.print(j + " ");
      }
      System.out.println("Эта строка никогда не будет выведена");
    }
    System.out.println("Цикл завершен.");
  }
}
Dastur quyidagi chiqishni yaratadi:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
Ko'rinib turibdiki, ichki halqa tashqi ko'chadan oldin uzilib qolsa, ikkala halqa ham tugaydi. Yodda tutingki, siz breakqo'shuvchi blok uchun belgilanmagan yorliqlarga -jump qila olmaysiz. Masalan, quyidagi dastur yaroqsiz va kompilyatsiya qilinmaydi:
// Эта программа содержит ошибку.
public class BreakErr {

  public static void main(String[] args) {
    one:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
    }
    for (int j = 0; j < 100; j++) {
      if (j == 10) {
        break one; //He верно!
      }
      System.out.print(j + " ");
    }
  }
}
Belgilangan tsikl iborani o'z ichiga olmaydi break, chunki boshqaruvni ushbu blokga o'tkazish mumkin emas.

Operatordan foydalanishcontinue

Ba'zan tsiklning keyingi iteratsiyasini erta boshlash foydali bo'ladi. Ya'ni, siz tsiklni bajarishni davom ettirishingiz kerak, lekin ushbu iteratsiya uchun uning tanasida qolgan kodni qayta ishlashni to'xtating. Aslida, bu gotokeyingi tana operatsiyalaridan pastadir blokining oxiriga o'tish. Ushbu harakat operator tomonidan amalga oshiriladi continue. Looplarda whileva do whileoperatori continueboshqaruvni to'g'ridan-to'g'ri tsiklni boshqaruvchi shartli ifodaga o'tkazishga sabab bo'ladi. Davrda forboshqaruv avval gapning takrorlanuvchi qismiga for, keyin esa shartli ifodaga o‘tadi. Barcha uchta tsikl uchun har qanday oraliq kod chetlab o'tiladi. continueHar bir satrda ikkita raqamni chop etish uchun foydalaniladigan dastur misoli quyida keltirilgan:
// Демонстрирует continue.
public class Continue {

  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      System.out.print(i + " ");
      if (i % 2 == 0) {
        continue;
      }
      System.out.println("");
    }
  }
}
%Bu kod biror narsa tekis yoki yo'qligini tekshirish uchun operatsiyadan (modul) foydalanadi i. Agar shunday bo'lsa, tsikl yangi satr belgisini chop etmasdan davom etadi. Dastur chiqishi:
0 1
2 3
4 5
6 7
8 9
, operatorida bo'lgani kabi break, continueqaysi o'rab olish tsiklini davom ettirish kerakligini ko'rsatadigan yorliqni belgilashingiz mumkin. continue0 dan 9 gacha bo'lgan uchburchak ko'paytirish jadvalini chop etish uchun foydalaniladigan misol dastur .
// Использование continue с меткой.
public class ContinueLabel {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < 10; j++) {
        if (j > i) {
          System.out.println();
          continue outer;
        }
        System.out.print(" " + (i * j));
      }
    }
    System.out.println();
  }
}
Ushbu misoldagi bayonot continuetsiklni baholashni tugatadi jva tomonidan boshqariladigan tsiklning keyingi iteratsiyasi bilan davom etadi i. Ushbu dasturdan olingan natijalar:
0
 0 1
 0 2 4
 0 3 6 9
 0 4 8 12 16
 0 5 10 15 20 25
 0 6 12 18 24 30 36
 0 7 14 21 28 35 42 49
 0 8 16 24 32 40 48 56 64
 0 9 18 27 36 45 54 63 72 81
Bu juda kamdan-kam hollarda foydalidir continue. Buning sabablaridan biri shundaki, Java ko'pchilik ilovalarga mos keluvchi ko'chma bayonotlarning boy to'plamini taqdim etadi. Biroq, iteratsiyani erta tugatish zarur bo'lgan maxsus vaziyatlar uchun bayonot continueushbu vazifani bajarishning tizimli usulini taqdim etadi.

Operatorreturn

Oxirgi nazorat bayonoti return. U usuldan aniq qaytish uchun ishlatiladi, ya'ni dastur boshqaruvini qayta chaqiruvchi dasturga o'tkazadi. Operator returno'tish operatori sifatida tasniflanadi. Garchi uning to'liq muhokamasi usullar muhokama qilinmaguncha kutish kerak bo'lsa-da, bu erda qisqacha ma'lumot berilgan return. Operatordan returnusulni chaqiruvchi dasturga qaytish uchun usulning istalgan joyidan foydalanish mumkin. Bayonot o'zi returnmavjud bo'lgan usulning bajarilishini darhol tugatadi. Quyidagi misol buni ko'rsatadi:
// Демонстрирует return.
public class Return {

  public static void main(String[] args) {
    boolean t = true;
    System.out.println("Перед оператором return.");
    if (t) {
      return; // возврат в вызывающую программу
    }
    System.out.println("Этот оператор никогда не выполнится.");
  }
}
Bu returnish vaqtida Java tizimiga qaytadi, chunki u main(). Ushbu dasturdan olingan natijalar:
Перед оператором return.
Yakuniy bayonot println()bajarilmaganini sezishingiz mumkin. Bajarish vaqtida returnboshqaruv yana chaqiruvchi dasturga o'tkaziladi. Yakuniy eslatma. Oldingi dasturda if(t) operatori kerak. println()Busiz Java kompilyatori "uchun bo'lmaydigan kod" xatosini chiqaradi, chunki u oxirgi bayonot hech qachon bajarilmasligini biladi . Ushbu xatoni oldini olish uchun (t) operatori ishlatiladi if; u kompilyatorni ushbu namoyish uchun aldaydi. Asl manbaga havola: O'tish operatorlari
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION