JavaRush /Blog Java /Random-MS /Operator Lompat
articles
Tahap

Operator Lompat

Diterbitkan dalam kumpulan
Java menyokong tiga operator lompat - break, continuedan return. Mereka memindahkan kawalan ke bahagian lain program anda. Mari kita pertimbangkan setiap pengendali secara terperinci. Pengendali peralihan - 1

Menggunakan operatorbreak

Operator breakdi Java digunakan dalam tiga kes. Mula-mula, seperti yang telah anda lihat, ia menamatkan urutan pernyataan di cawangan pernyataan switch. Kedua, ia boleh digunakan untuk keluar dari gelung. Ketiga, ia boleh digunakan sebagai bentuk "bertamadun" bagi pengendali lompat tanpa syarat goto. Bahagian ini menerangkan dua kes terakhir. Gunakan breakuntuk keluar dari gelung Dengan menggunakan break, anda boleh memaksa gelung untuk ditamatkan serta-merta, memintas ungkapan bersyarat dan sebarang kod yang tinggal dalam badan gelung. Apabila pernyataan breakditemui dalam gelung, yang kedua berakhir dan kawalan program dipindahkan ke pernyataan yang mengikutinya. Contoh mudah:
// Использование 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("Цикл завершен.");
  }
}
Program ini menghasilkan output berikut:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Walaupun gelung fordireka bentuk di sini untuk melaksanakan penyataannya dari 0 hingga 99 kali, pengendali breakmenyebabkannya ditamatkan awal apabila i ialah 4. Operator breakboleh digunakan dengan mana-mana gelung Java, termasuk gelung tak terhingga yang disengajakan. Sebagai contoh, di bawah ialah program sebelumnya yang dikodkan menggunakan gelung while. Output program ini adalah sama seperti pendahulunya.
// Использование 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("Цикл завершен.");
  }
}
Apabila digunakan dalam set gelung bersarang, pernyataan breakhanya akan keluar dari gelung paling dalam. Sebagai contoh:
// Использование 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("Цикл завершен.");
  }
}
Program ini menghasilkan output berikut:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Seperti yang anda lihat, pernyataan breakdalam gelung dalam menyebabkan hanya gelung itu ditamatkan. Gelung luar tidak terjejas. Marilah kita membuat dua lagi ulasan mengenai break. Pertama, berbilang kenyataan mungkin muncul dalam gelung break. Namun, berhati-hatilah. Terlalu banyak daripada mereka cenderung untuk merosakkan kod anda. Kedua, break, yang menamatkan -penyataan switchhanya mempengaruhi -penyataan switch(dan bukan gelung yang menyertakannya). Ulasan: Breaktidak direka bentuk sebagai cara penamatan gelung biasa. Tujuan ini disampaikan oleh ungkapan bersyarat pengepala gelung. Operator breakhanya boleh digunakan untuk memecahkan gelung apabila situasi khas tertentu timbul.

Gunakan breaksebagai boranggoto

Selain digunakan dalam pernyataan suis dan gelung, breakia juga boleh digunakan secara bersendirian sebagai bentuk "bertamadun" goto. Java tidak mengandungi pengendali gotokerana ia melaksanakan cawangan dengan cara yang sewenang-wenangnya dan tidak berstruktur. Kod yang menggunakan . secara intensif gotobiasanya sukar untuk difahami dan dikekalkan. Ia juga mengatasi beberapa pengoptimuman pengkompil. Walau bagaimanapun, terdapat beberapa tempat dalam program yang gotoaliran kawalan merupakan binaan yang bernilai dan sah. Sebagai contoh, gotoia boleh berguna apabila anda keluar daripada set gelung bersarang dalam. Untuk mengendalikan situasi sedemikian, Java mentakrifkan bentuk lanjutan operator break. Menggunakannya, anda boleh keluar dari satu atau lebih blok kod. Blok ini tidak perlu menjadi sebahagian daripada gelung atau pernyataan switch. Ini boleh menjadi mana-mana blok. Seterusnya, anda boleh menentukan dengan tepat di mana pelaksanaan akan diteruskan kerana borang ini breakberfungsi dengan tanda dan memberikan faedah goto, memintas masalahnya. Kenyataan breakberlabel mempunyai bentuk umum berikut: break label; Berikut labelialah nama label yang mengenal pasti beberapa blok kod. Apabila borang ini breakdilaksanakan, kawalan dipindahkan daripada blok kod yang dinamakan (yang labelnya dinyatakan dalam penyata break) kepada pernyataan yang mengikuti blok itu. Blok kod yang ditanda mesti semestinya menyertakan penyataan ini break, tetapi kemasukan ini tidak diperlukan secara langsung (iaitu, breakia boleh dimasukkan bukan secara langsung dalam blok dengan labelnya sendiri, tetapi dalam blok bersarang di dalamnya, mungkin juga ditandakan ). Ini bermakna anda boleh menggunakan operator bertanda breakuntuk melarikan diri daripada set blok bersarang. Tetapi anda tidak boleh menggunakan breakblok kod yang tidak termasuk break. Untuk menamakan blok, letakkan label pada permulaan blok (sebelum pendakap kerinting pembukaan). Label ialah sebarang pengecam Java yang sah diikuti dengan titik bertindih. Selepas melabelkan blok, labelnya boleh digunakan sebagai hujah kepada operator break. Ini akan menyebabkan pelaksanaan diteruskan dari hujung blok yang ditanda. Sebagai contoh, program berikut mengandungi tiga blok bersarang, setiap satu dengan labelnya sendiri. Operator breakbergerak ke hadapan, melepasi hujung blok yang ditandakan dengan label second, melangkau dua operator 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.");
    }
  }
}
Menjalankan program ini menghasilkan output berikut:
Перед оператором break.
Данный оператор размещен после блока second.
Salah satu penggunaan paling biasa operator yang ditanda breakadalah untuk melarikan diri dari gelung bersarang. Sebagai contoh, dalam program berikut, gelung luar dilaksanakan sekali sahaja:
// Использование 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("Цикл завершен.");
  }
}
Program ini menghasilkan output berikut:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
Adalah mudah untuk melihat bahawa apabila gelung dalam terganggu sebelum penghujung gelung luar, kedua-dua gelung berakhir. Perlu diingat bahawa anda tidak boleh melakukan break-lompat ke mana-mana label yang tidak ditentukan untuk blok yang disertakan. Sebagai contoh, program berikut tidak sah dan tidak akan disusun:
// Эта программа содержит ошибку.
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 + " ");
    }
  }
}
Oleh kerana gelung yang ditandakan tidak termasuk pernyataan break, adalah tidak mungkin untuk memindahkan kawalan ke blok ini.

Menggunakan operatorcontinue

Kadangkala adalah berguna untuk memulakan lelaran seterusnya bagi gelung lebih awal. Iaitu, anda perlu terus melaksanakan gelung, tetapi hentikan memproses seluruh kod dalam badannya untuk lelaran tertentu ini. Sebenarnya, ini adalah gotoperalihan melepasi operasi badan seterusnya ke penghujung blok gelung. Tindakan ini dilakukan oleh pengendali continue. Dalam gelung, pengendali whiledan menyebabkan kawalan dipindahkan terus kepada ungkapan bersyarat yang mengawal gelung. Dalam gelung, kawalan melepasi pertama ke bahagian lelaran pernyataan dan kemudian ke ungkapan bersyarat. Untuk ketiga-tiga gelung, sebarang kod perantaraan dipintas. Contoh program yang digunakan untuk mencetak dua nombor pada setiap baris diberikan di bawah: do whilecontinueforforcontinue
// Демонстрирует 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("");
    }
  }
}
Kod ini menggunakan operasi %(modulo) untuk menyemak sama ada sesuatu adalah igenap. Jika ya, gelung diteruskan tanpa mencetak aksara baris baharu. Output program:
0 1
2 3
4 5
6 7
8 9
Seperti dengan , operator break, continueanda boleh menentukan label yang menunjukkan gelung yang disertakan untuk diteruskan. Contoh atur cara yang digunakan continueuntuk mencetak jadual pendaraban segi tiga daripada 0 hingga 9.
// Использование 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();
  }
}
Pernyataan continuedalam contoh ini menamatkan gelung menilai j, dan meneruskan dengan lelaran seterusnya gelung yang didorong oleh i. Output daripada program ini:
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
Ia amat jarang berguna continue. Satu sebab untuk ini ialah Java menyediakan set pernyataan gelung yang kaya yang sesuai dengan kebanyakan aplikasi. Walau bagaimanapun, bagi situasi khas yang memerlukan penamatan lelaran lebih awal, pernyataan itu continuemenyediakan cara berstruktur untuk menyelesaikan tugas ini.

Operatorreturn

Pernyataan kawalan terakhir ialah return. Ia digunakan untuk kembali secara eksplisit daripada kaedah, iaitu, ia memindahkan kawalan program kembali ke program panggilan. Operator returndikelaskan sebagai operator peralihan. Walaupun perbincangan penuh mesti menunggu sehingga kaedah dibincangkan, gambaran ringkas disediakan di sini return. Pengendali returnboleh digunakan di mana-mana dalam kaedah untuk melompat kembali ke program yang memanggil kaedah. Pernyataan itu returndengan serta-merta menamatkan pelaksanaan kaedah yang ada. Contoh berikut menggambarkan ini:
// Демонстрирует return.
public class Return {

  public static void main(String[] args) {
    boolean t = true;
    System.out.println("Перед оператором return.");
    if (t) {
      return; // возврат в вызывающую программу
    }
    System.out.println("Этот оператор никогда не выполнится.");
  }
}
Ini returnkembali kepada sistem Java semasa runtime, kerana ia adalah sistem yang memanggil main(). Output daripada program ini:
Перед оператором return.
Anda mungkin perasan bahawa kenyataan akhir println()tidak dilaksanakan. Pada masa pelaksanaan, returnkawalan dipindahkan kembali ke program panggilan. Satu nota akhir. Dalam program sebelumnya, ifoperator (t) diperlukan. Tanpa itu, pengkompil Java akan membuang ralat "kod tidak boleh dicapai" kerana ia akan mengetahui bahawa pernyataan terakhir println()tidak akan dilaksanakan. Untuk mengelakkan ralat ini, operator (t) digunakan if; ia menipu pengkompil demi demonstrasi ini. Pautan ke sumber asal: Operator peralihan
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION