ใครสามารถบอกฉันถึงความแตกต่างระหว่างbreak
และcontinue
คำสั่งได้หรือไม่
ใครสามารถบอกฉันถึงความแตกต่างระหว่างbreak
และcontinue
คำสั่งได้หรือไม่
คำตอบ:
break
ออกจากห่วงcontinue
กระโดดไปที่การทำซ้ำต่อไป
ดูคำชี้แจงการแยกสาขาสำหรับรายละเอียดเพิ่มเติมและตัวอย่างโค้ด:
break
คำสั่ง break มีสองรูปแบบ: ติดป้ายกำกับและไม่มีป้ายกำกับ คุณเห็นฟอร์มที่ไม่มีชื่อในการสนทนาก่อนหน้านี้ของคำสั่ง switch นอกจากนี้คุณยังสามารถใช้ตัวแบ่งที่ไม่มีป้ายกำกับเพื่อยกเลิกวง for for, while, หรือ do-while [... ]
คำสั่ง break ที่ไม่มีป้ายกำกับจะยกเลิกสวิตช์ในสุดสำหรับ, while, หรือ do-while แต่การหยุดที่มีเลเบลจะยุติประโยคด้านนอก
continue
คำสั่งดำเนินการต่อจะข้ามการวนซ้ำปัจจุบันของ for, while, หรือ do-while แบบฟอร์มที่ไม่มีป้ายกำกับจะข้ามไปที่ส่วนท้ายของเนื้อความของวงในสุดและประเมินนิพจน์บูลีนที่ควบคุมลูป [ ... ]
คำสั่ง continue ที่มีข้อความจะข้ามการวนซ้ำปัจจุบันของลูปภายนอกที่มีเครื่องหมายกำกับไว้
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-loop แล้วแตก / ทำต่อจากบล็อกที่ซ้อนกันไปยังบล็อกภายนอก ในบางกรณีสิ่งนี้อาจมีประโยชน์ แต่โดยทั่วไปคุณจะพยายามหลีกเลี่ยงรหัสดังกล่าวยกเว้นตรรกะของโปรแกรมจะดีกว่าที่จะเข้าใจมากกว่าในตัวอย่างต่อไปนี้:
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: และตามด้วยความคิดเห็นซึ่งดูเหมือนคนต่างด้าวเช่น webadress ในซอร์สโค้ด:
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
break
ออกจากวงอย่างสมบูรณ์ continue
ข้ามงบหลังจากที่ยังคงคำสั่งและช่วยให้การวนลูป
งบแบ่ง
บางครั้งมีความจำเป็นที่จะต้องออกจากลูปก่อนที่ลูปจะวนซ้ำอย่างเต็มที่กับค่าขั้นตอนทั้งหมด ตัวอย่างเช่นการวนซ้ำรายการตัวเลขจนกว่าคุณจะพบหมายเลขที่ตรงตามเงื่อนไข หรือวนรอบตัวอักษรจากไฟล์จนกว่าจะอ่านตัวอักขระที่ต้องการ
ในตัวอย่างต่อไปนี้เราใช้การวนรอบง่ายเพื่อพิมพ์ค่าจาก 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 โค้ดของเราจะแตกออกจากลูปเมื่อ i เท่ากับ 4 คุณสามารถใช้คำสั่ง break เพื่อแบ่งออกเป็นลูปในขณะที่ลูปและทำในขณะที่ลูป คำสั่ง break จะแยกออกจากลูปปัจจุบันเท่านั้น ในการที่จะแยกวงรอบนอกออกจากวงในที่ซ้อนกันคุณจะต้องใช้ป้ายกำกับที่มีคำสั่ง break
for(int i=0; i<10; i++) {
System.out.println(i);
if(i==4) {
break;
}
}
เอาท์พุท:
0
1
2
3
4
ดำเนินการต่องบ
คำสั่งดำเนินการต่อของ Java ข้ามการวนซ้ำปัจจุบันของลูปและไปที่การวนซ้ำถัดไปโดยตรง หลังจากเรียกคำสั่ง continue ในการ for loop การวนลูปจะดำเนินการตามค่าขั้นตอนและประเมินเงื่อนไขบูลีนก่อนที่จะดำเนินการซ้ำต่อไป ในตัวอย่างต่อไปนี้เรากำลังพิมพ์ค่าทั้งหมดจาก 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 ลูปทั้งหมดซ้อนกันภายใน เนื่องจากไม่มีวิธีใดที่จะแยกวงรอบนอกออกจากวงในสุดวงในได้อย่างสมบูรณ์เราจึงสามารถใช้ป้ายกำกับ "outer1" เพื่อทำสิ่งนี้ให้สำเร็จและระบุฉลากถัดจากคำสั่ง 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 outer1;” เพื่อแยกออกจากลูปส่วนใหญ่ด้านนอก
ป้ายกำกับวน - ดำเนินการต่อ
คุณยังสามารถใช้ป้ายกำกับที่มีคำหลักต่อไปเพื่อดำเนินการวนซ้ำจากจุดเฉพาะ การยกตัวอย่างก่อนหน้าและเพียงแค่เปลี่ยนหนึ่งบรรทัดเพื่อระบุcontinue outer1;
แทนbreak outer1;
จะทำให้ลูปดำเนินการวนซ้ำจากouter1
ป้ายกำกับแทนการแยกออกจากลูป โปรดสังเกตว่าแต่ละครั้งที่continue outer1;
มีการเรียกใช้รหัสจะดำเนินต่อจากวงรอบนอกหลังจากเพิ่มดัชนีลูป i ที 1 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
break
ผลคำสั่งในการเลิกจ้างของคำสั่งเพื่อที่จะนำไปใช้ ( switch
, for
, do
หรือwhile
)
continue
คำสั่งที่ใช้ในการจบการย้ำห่วงในปัจจุบันและกลับมาควบคุมในงบห่วง
continue
ข้ามการดำเนินการลูปปัจจุบันและย้ายไปที่ลูปถัดไปขณะที่break
MOVES OUT ออกจากลูปและดำเนินการคำสั่งถัดไปหลังจากลูป ฉันเรียนรู้ความแตกต่างโดยใช้รหัสต่อไปนี้ ตรวจสอบผลลัพธ์ที่ต่างกันหวังว่าสิ่งนี้จะช่วยได้
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);
breakทำให้ loop หยุดทำงานและค่าของ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
คำสั่งมีอยู่โครงสร้างการควบคุมการวนลูปในปัจจุบันและกระโดดอยู่เบื้องหลังมันในขณะที่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 ซึ่งมีป้ายกำกับการหยุดพักการติดป้ายกำกับการหยุดการติดป้ายกำกับและดำเนินการติดป้ายกำกับต่อไปตอนนี้ฉันจะพูดถึงความแตกต่างระหว่างพวกเขา
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");
}
}
คำสั่ง break ที่ไม่มีป้ายกำกับจะยกเลิกสวิตช์ภายในสุดสำหรับขณะที่คำสั่ง 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
}
}
}
คำสั่ง continue ที่มีข้อความจะข้ามการวนซ้ำปัจจุบันของการวนซ้ำรอบนอกที่ทำเครื่องหมายด้วย lable ที่กำหนดถ้าคุณ javac และ java the 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 นี้: ป้อนคำอธิบายลิงก์ที่นี่
ใส่เพียง: break จะยุติลูปปัจจุบันและดำเนินการต่อที่บรรทัดแรกหลังจากลูปสิ้นสุด ข้ามกลับไปที่เงื่อนไขการวนรอบต่อไปและทำการวนซ้ำต่อไป
for (int i = 1; i <= 3; i++) {
if (i == 2) {
continue;
}
System.out.print("[i:" + i + "]");
ลองใช้รหัสนี้ในเน็ตเบียนคุณจะเข้าใจถึงความแตกต่างระหว่างการหยุดพักและดำเนินการต่อ
for (int i = 1; i <= 3; i++) {
if (i == 2) {
break;
}
System.out.print("[i:" + i + "]");
โปรแกรมง่ายๆที่เข้าใจความแตกต่างระหว่างทำต่อและหยุดพัก
เมื่อ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 หยุดการทำซ้ำและเริ่ม ittration ถัดไป Ex:
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 หยุดลูปหรือออกจากลูป
ดังนั้นคุณจึงอยู่ในวง for หรือ while การใช้ตัวแบ่ง จะทำให้คุณออกจากวง ในขณะที่มันจะจบลง ดำเนินการต่อ; จะบอกให้เรียกใช้การวนซ้ำครั้งถัดไป
ไม่มีจุดใช้ในการดำเนินการต่อในถ้าคำสั่ง แต่ตัวแบ่ง มีประโยชน์ ในกรณีสวิตช์ ... ให้ใช้ตัวแบ่งเสมอ เพื่อยุติเคสดังนั้นจึงไม่ดำเนินการกับเคสอื่น
if
อยู่ภายในวงซึ่งในกรณีที่มีความอุดมสมบูรณ์ของจุด