Відповіді:
break
залишає петлю, continue
переходить до наступної ітерації.
Докладнішу інформацію та зразки коду див. У розділах Виписки :
break
Заява про перерву має дві форми: марковану та без маркування. Ви побачили незазначену форму в попередньому обговоренні заяви переключення. Ви також можете використати незазначений перерву для припинення циклу для, в той час, або під час виконання циклу [...]
Немальований оператор перерви припиняє найпотужніший комутатор for, while, або do-while, але мічений перерва припиняє зовнішнє твердження.
continue
Оператор продовження пропускає поточну ітерацію циклу for, while або do-while. Немечена форма пропускається до кінця тіла найпотаємнішої петлі і оцінює булевий вираз, який керує циклом. [...]
Позначений оператор продовження пропускає поточну ітерацію зовнішньої петлі, позначеної даною міткою.
System.out.println ("starting loop:");
for (int n = 0; n < 7; ++n)
{
System.out.println ("in loop: " + n);
if (n == 2) {
continue;
}
System.out.println (" survived first guard");
if (n == 4) {
break;
}
System.out.println (" survived second guard");
// continue at head of loop
}
// break out of loop
System.out.println ("end of loop or exit via break");
Це призведе до наступного результату:
starting loop:
in loop: 0
survived first guard
survived second guard
in loop: 1
survived first guard
survived second guard
in loop: 2
in loop: 3
survived first guard
survived second guard
in loop: 4
survived first guard
end of loop or exit via break
Ви можете позначити блок не лише циклом for, а потім перервати / продовжити з вкладеного блоку на зовнішній. У кількох випадках це може бути корисним, але загалом ви намагатиметесь уникати такого коду, за винятком логіки програми, що краще зрозуміти, ніж у наступному прикладі:
first:
for (int i = 0; i < 4; ++i)
{
second:
for (int j = 0; j < 4; ++j)
{
third:
for (int k = 0; k < 4; ++k)
{
System.out.println ("inner start: i+j+k " + (i + j + k));
if (i + j + k == 5)
continue third;
if (i + j + k == 7)
continue second;
if (i + j + k == 8)
break second;
if (i + j + k == 9)
break first;
System.out.println ("inner stop: i+j+k " + (i + j + k));
}
}
}
Оскільки це можливо, це не означає, що ви повинні його використовувати.
Якщо ви хочете смішно придушити свій код, ви вибираєте не кричуще ім’я, а http: і дотримуйтесь його за допомогою коментаря, який виглядає чужорідним, як веб-адреса у вихідному коді:
http://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i)
{
if (i == 2)
break http;
Я думаю, це з вікторини Джошуа Блоха. :)
http://stackoverflow.com/questions/462373/
працювати?
Перерва залишає цикл повністю і виконує операції після циклу. Тоді як Continue залишає поточну ітерацію та виконує наступне значення в циклі.
Цей Кодекс пояснює все:
public static void main(String[] args) {
for(int i=0;i<10;i++)
{
if (i==4)
{
break;
}
System.out.print(i+"\t");
}
System.out.println();
for(int i=0;i<10;i++)
{
if (i==4)
{
continue;
}
System.out.print(i+"\t");
}
}
Вихід:
0 1 2 3
0 1 2 3 5 6 7 8 9
Заява про перерву
Іноді необхідно вийти з циклу перш ніж цикл повністю завершить ітерацію над усіма значеннями кроку. Наприклад, перебираючи список номерів, поки не знайдете число, яке відповідає певній умові. Або циклічно перебираючи потік символів з файлу, поки певний символ не буде прочитаний.
У наступному прикладі ми використовуємо простий цикл для друку значень від 0 до 9:
for(int i=0; i<10; i++) {
System.out.println(i);
}
Вихід:
0
1
2
3
4
5
6
7
8
9
Тепер, якщо ми додамо оператор break, коли i == 4, наш код вирветься з циклу, коли я дорівнює 4. Ви можете використовувати оператор break для виходу з циклів, а циклів і циклів do-while. Заява перерви вириватиметься лише з поточного циклу. Для того, щоб вирвати зовнішній цикл із вкладеного внутрішнього циклу, вам потрібно буде використовувати мітки із заявою break.
for(int i=0; i<10; i++) {
System.out.println(i);
if(i==4) {
break;
}
}
Вихід:
0
1
2
3
4
Продовжити заяву
Повідомлення продовження Java пропускає поточну ітерацію циклу і переходить безпосередньо до наступної ітерації. Після виклику оператора продовження у циклі for, виконання циклу виконає значення кроку та оцінить булева умова, перш ніж перейти до наступної ітерації. У наступному прикладі ми друкуємо всі значення від 0 до 9 у циклі, але пропускаємо надруковування 4.
for(int i=0; i<10; i++) {
if(i==4) {
continue;
}
System.out.println(i);
}
Вихід:
0
1
2
3
5 <---- SKIPPED OVER 4 and continued with next loop iteration
6
7
8
9
Мітка циклу - Заява про розрив Ви можете використовувати мітки в межах вкладених циклів , вказавши, де потрібно продовжити виконання після виривання з внутрішньої петлі. Зазвичай оператор break вирветься лише із внутрішнього циклу, тому коли ви хочете вирватися із зовнішньої петлі, ви можете використовувати мітки для цього, фактично роблячи щось подібне до goto.
У наступному прикладі використовуються 3 петлі, всі вкладені одна в одну. Оскільки немає можливості повністю вирватися із зовнішньої найбільшої петлі зсередини внутрішнього самого циклу, ми можемо використовувати мітку "external1" для цього і вказати мітку поруч із заявою break.
outer1:
for(int i=0; i<5; i++) {
for(int j=0; j<4; j++) {
for(int k=0; k<2; k++) {
System.out.println("[" + i + "][" + j + "][" + k + "]");
if(j == 3) {
break outer1;
}
}
}
}
Вихід:
[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0]
Зверніть увагу, як останній рядок відображається " 0 [0]", де j == 3, і саме там ми назвали "break external1;" вирватися із зовнішньої самої петлі.
Мітки циклу - продовження заяви
Ви також можете використовувати мітки з ключовим словом «продовжити», щоб продовжити цикл із певної точки. Якщо взяти попередній приклад і просто змінити один рядок, щоб вказати continue outer1;
замість, break outer1;
це призведе до того, що цикл продовжує циклічити з outer1
мітки, а не виривається з циклу. Зауважте, як кожен раз continue outer1;
викликається, код продовжується з зовнішньої петлі після збільшення індексу циклу i на 1.
outer1:
for(int i=0; i<5; i++) {
for(int j=0; j<4; j++) {
for(int k=0; k<2; k++) {
System.out.println("[" + i + "][" + j + "][" + k + "]");
if(j == 3) {
continue outer1;
}
}
}
[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[1][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[1][0][1]
[1][1][0]
[1][1][1]
[1][2][0]
[1][2][1]
[1][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[2][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[2][0][1]
[2][1][0]
[2][1][1]
[2][2][0]
[2][2][1]
[2][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[3][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[3][0][1]
[3][1][0]
[3][1][1]
[3][2][0]
[3][2][1]
[3][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[4][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[4][0][1]
[4][1][0]
[4][1][1]
[4][2][0]
[4][2][1]
[4][3][0]
Джерело: Петлі в Java - Ultimate Guide
Відмінна відповідь проста і точна.
Я б додав зразок коду.
C:\oreyes\samples\java\breakcontinue>type BreakContinue.java
class BreakContinue {
public static void main( String [] args ) {
for( int i = 0 ; i < 10 ; i++ ) {
if( i % 2 == 0) { // if pair, will jump
continue; // don't go to "System.out.print" below.
}
System.out.println("The number is " + i );
if( i == 7 ) {
break; // will end the execution, 8,9 wont be processed
}
}
}
}
C:\oreyes\samples\java\breakcontinue>java BreakContinue
The number is 1
The number is 3
The number is 5
The number is 7
continue
пропускає струм , що виконує цикл і переходить до наступного циклу , тоді break
виходить з циклу і виконує наступний оператор після циклу. Я дізнався різницю за допомогою наступного коду. Ознайомтеся з різними результатами. Сподівайтеся, це допомагає.
public static void main(String[] args) {
for(int i = 0; i < 5; i++){
if (i == 3) {
continue;
}
System.out.print(i);
}
}//prints out 0124, continue moves to the next iteration skipping printing 3
public static void main(String[] args) {
for(int i = 0; i < 5; i++){
if (i == 3) {
break;
}
System.out.print(i);
}
}//prints out 012, break moves out of the loop hence doesnt print 3 and 4
Розглянемо наступне:
int n;
for(n = 0; n < 10; ++n) {
break;
}
System.out.println(n);
Розрив призводить до припинення циклу і значення n дорівнює 0.
int n;
for(n = 0; n < 10; ++n) {
continue;
}
System.out.println(n);
Продовження призводить до повернення лічильника програми до першого рядка циклу (умова перевіряється і значення n збільшується) та кінцеве значення n дорівнює 10.
Слід також зазначити, що розрив лише припиняє виконання циклу, який знаходиться в межах:
int m;
for(m = 0; m < 5; ++m)
{
int n;
for(n = 0; n < 5; ++n) {
break;
}
System.out.println(n);
}
System.out.println(m);
Виведе щось на ефект
0
0
0
0
0
5
Оператор break
виривається з циклу (наступне виконання, яке слід виконати, є першим після закриття дужки), при цьому continue
запускається цикл на наступній ітерації.
Простий приклад:
break
залишає петлю.
int m = 0;
for(int n = 0; n < 5; ++n){
if(n == 2){
break;
}
m++;
}
System.out.printl("m:"+m); // m:2
continue
повернеться до початку циклу.
int m = 0;
for(int n = 0; n < 5; ++n){
if(n == 2){
continue; // Go back to start and dont execute m++
}
m++;
}
System.out.printl("m:"+m); // m:4
Щоб уникнути виконання чого-небудь, якщо виконується умова, слід скористатись продовженням та вийти з циклу, якщо умова виконана, слід використати перерву.
Наприклад, у наведеному нижче коді.
for(int i=0;i<5;i++){
if(i==3){
continue;
}
System.out.println(i);
}
Наведений вище код надрукує результат: 0 1 2 4
НІКОЛИ не враховуйте цей код
for(int i=0;i<5;i++){
if(i==3){
break;
}
System.out.println(i);
}
Цей код надрукує 0 1 2
У цьому полягає основна відмінність у продовженні та перерві.
ось семантична перерва:
int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// find 9
for(int i = 0; i < a.Length; i++)
{
if (a[i] == 9)
goto goBreak;
Console.WriteLine(a[i].ToString());
}
goBreak:;
ось семантичне продовження:
int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// skip all odds
for(int i = 0; i < a.Length; i++)
{
if (a[i] % 2 == 1)
goto goContinue;
Console.WriteLine(a[i].ToString());
goContinue:;
}
По-перше, я думаю, ви повинні знати, що в Java існує два типи перерви і продовження, які мають мітку break, unlabeled break, labeled continue та unlabeled continue.Зараз я розповім про різницю між ними.
class BreakDemo {
public static void main(String[] args) {
int[] arrayOfInts =
{ 32, 87, 3, 589,
12, 1076, 2000,
8, 622, 127 };
int searchfor = 12;
int i;
boolean foundIt = false;
for (i = 0; i < arrayOfInts.length; i++) {
if (arrayOfInts[i] == searchfor) {
foundIt = true;
break;//this is an unlabeled break,an unlabeled break statement terminates the innermost switch,for,while,do-while statement.
}
}
if (foundIt) {
System.out.println("Found " + searchfor + " at index " + i);
} else {
System.out.println(searchfor + " not in the array");
}
}
Немальований оператор перерви припиняє найпотужніший комутатор для оператора do, while.
public class BreakWithLabelDemo {
public static void main(String[] args) {
search:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
System.out.println(i + " - " + j);
if (j == 3)
break search;//this is an labeled break.To notice the lab which is search.
}
}
}
Помічений перерва припиняє зовнішню заяву. Якщо ви будете javac та java, це демонстрація, ви отримаєте:
0 - 0
0 - 1
0 - 2
0 - 3
class ContinueDemo {
public static void main(String[] args) {
String searchMe = "peter piper picked a " + "peck of pickled peppers";
int max = searchMe.length();
int numPs = 0;
for (int i = 0; i < max; i++) {
// interested only in p's
if (searchMe.charAt(i) != 'p')
continue;//this is an unlabeled continue.
// process p's
numPs++;
}
System.out.println("Found " + numPs + " p's in the string.");
}
Немальований оператор продовження пропускає поточну ітерацію оператора for, while, do-while.
public class ContinueWithLabelDemo {
public static void main(String[] args) {
search:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
System.out.println(i + " - " + j);
if (j == 3)
continue search;//this is an labeled continue.Notice the lab which is search
}
}
}
Позначений оператор продовження пропускає поточну ітерацію зовнішньої петлі, позначеної даною міткою, якщо javac та java demo ви отримаєте:
0 - 0
0 - 1
0 - 2
0 - 3
1 - 0
1 - 1
1 - 2
1 - 3
2 - 0
2 - 1
2 - 2
2 - 3
якщо у вас виникли запитання, ви можете ознайомитись з навчальним посібником Java щодо цього: введіть опис посилання тут
Простіше кажучи: перерва припинить поточний цикл і продовжить виконання в першому рядку після закінчення циклу. продовжити стрибки назад до стану циклу і продовжує працювати цикл.
Проста програма, щоб зрозуміти різницю між продовженням і перервою
Коли continue
використовується
public static void main(String[] args) {
System.out.println("HelloWorld");
for (int i = 0; i < 5; i++){
System.out.println("Start For loop i = " + i);
if(i==2){
System.out.println("Inside if Statement for i = "+i);
continue;
}
System.out.println("End For loop i = " + i);
}
System.out.println("Completely out of For loop");
}
OutPut:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Start For loop i = 3
End For loop i = 3
Start For loop i = 4
End For loop i = 4
Completely out of For loop
Коли break
використовується
public static void main(String[] args) {
System.out.println("HelloWorld");
for (int i = 0; i < 5; i++){
System.out.println("Start For loop i = " + i);
if(i==2){
System.out.println("Inside if Statement for i = "+i);
break;
}
System.out.println("End For loop i = " + i);
}
System.out.println("Completely out of For loop");
}
Output:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Completely out of For loop
Продовжити Statment зупинити ітерацію та розпочати наступну ітерацію Приклад:
System.out.println("continue when i is 2:");
for (int i = 1; i <= 3; i++) {
if (i == 2) {
System.out.print("[continue]");
continue;
}
System.out.print("[i:" + i + "]");
}
і Break Statment зупиніть цикл або Вийдіть з циклу
значить, ви знаходитесь всередині циклу для або під час. Використання перерви; поставить вас поза петлею. Як і в, це закінчиться. Продовжуйте; підкаже, щоб запустити наступну ітерацію.
Немає сенсу використовувати продовжувати, якщо оператор if, але перервати; корисно. У переключенні ... випадку, завжди використовуйте перерву; закінчити справу, тому вона не виконує іншу справу.
if
не всередині циклу, і в цьому випадку є багато точки.