ว่ากันว่าโปรแกรมเมอร์ที่ดีที่สุดคือโปรแกรมเมอร์ที่ขี้เกียจ แทนที่จะทำการกระทำแบบเดิมหลายๆ ครั้ง เขากลับมาพร้อมกับอัลกอริทึมที่จะทำหน้าที่แทนเขา และเขาจะทำมันให้ดีโดยที่ไม่ต้องทำซ้ำอีก
เพื่อหลีกเลี่ยงการเขียนโค้ดเดิมซ้ำแล้วซ้ำอีก จึงมีการคิดค้นลูปขึ้น ลองจินตนาการว่าเราจำเป็นต้องแสดงตัวเลขตั้งแต่ 0 ถึง 99 บนคอนโซล รหัสที่ไม่มีการวนซ้ำ:
เงื่อนไขสำหรับการออกจากลูปคือนิพจน์บูลีน หากเป็นเท็จ การวนซ้ำจะสิ้นสุด ในตัวอย่างข้างต้น ตัวแปร
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
รหัสนี้จะใช้เวลา 100 บรรทัด! มากมาย. และนี่คือลักษณะของการวนซ้ำ:
for(int i = 0; i < 100; i++) {
System.out.println(i);
}
แค่ 3 บรรทัด!
สำหรับลูปคืออะไร?
for loopเป็นโครงสร้างการควบคุมของโค้ดโปรแกรมที่แบ่งเชิงเส้นของการดำเนินการของอัลกอริทึมและช่วยให้คุณสามารถรันโค้ดที่ระบุได้หลายครั้ง เช่น คุณต้องกินยา 30 หยด อัลกอริทึมจะเป็นดังนี้:- เตรียมแก้ว.
- เปิดฝา
- รับ 1 หยด
- รับ 2 หยด ...
- รับ 30 หยด
- ปิดยา.
- รับส่วนที่ได้รับ
- เตรียมแก้ว.
- เปิดฝาหยด
- รับ 30 หยด
- ปิดยา.
- รับส่วนที่ได้รับ
for loop ทำงานอย่างไร
for loop ถูกใช้ดังนี้:for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
บทสรุป:
0
1
2
3
4
หากเราแปลรายการนี้เป็นภาษามนุษย์ เราจะได้สิ่งต่อไปนี้: “ สร้างตัวแปร i ด้วยค่าเริ่มต้นเป็น 0 จนกระทั่งถึง 5 เพิ่ม 1 เข้าไป และในแต่ละขั้นตอนให้เขียนค่า i ไปที่คอนโซล ” for loop ใน Java ขึ้นอยู่กับสามขั้นตอน ซึ่งสามารถแสดงได้ด้วยไดอะแกรมต่อไปนี้: 
i
จะเพิ่มขึ้นทีละ 1 หากค่าของมันน้อยกว่า 5 การวนซ้ำจะดำเนินต่อไป แต่ทันทีที่i
มันมากกว่าหรือเท่ากับ 5 วงจรจะหยุดลง ตัวดำเนินการตัวนับคือนิพจน์ที่ทำการแปลงตัวแปรตัวนับ ในตัวอย่างข้างต้น ตัวแปรi
เพิ่มขึ้น 1 นั่นคือ ลูปจะถูกดำเนินการ 5 ครั้งพอดี หากตัวดำเนินการตัวนับบวก 2 เข้ากับตัวแปรi
ผลลัพธ์จะแตกต่างออกไป:
for(int i = 0; i < 5; i = i + 2) {
System.out.println(i);
}
บทสรุป:
0
2
4
คุณยังสามารถคูณตัวแปร หาร เพิ่มกำลัง โดยทั่วไป ทำทุกอย่างที่คุณต้องการ สิ่งสำคัญคือการเปลี่ยนแปลงส่งผลให้เกิดตัวเลข เนื้อความของลูปคือโค้ดใดๆ ก็ตามที่สามารถดำเนินการได้ ในตัวอย่างด้านบน เนื้อความของลูปกำลังส่งออกค่าของตัวแปร i ไปยังคอนโซล แต่เนื้อหาของเนื้อหานี้ถูกจำกัดด้วยงานและจินตนาการ โดยสรุปโครงร่างทั้งหมด หลักการของ for loop นี้มีดังนี้: โค้ดที่อยู่ในเนื้อหาของลูปจะถูกดำเนินการหลายครั้งตามจำนวนการแปลงที่ตัวดำเนินการตัวนับจะดำเนินการก่อนที่จะถึงเงื่อนไขสำหรับการออกจากลูป . หากคุณตั้งค่าเงื่อนไขการออกลูปเป็นtrue
:
for(int i = 0; true; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
จากนั้นโค้ดหลังลูปจะถูกทำเครื่องหมายด้วยข้อผิดพลาดunreachable statement
เนื่องจากจะไม่มีการดำเนินการ ความท้าทายสำหรับความฉลาด: จากการรันโค้ดด้านล่าง “ Loop ended
” จะถูกส่งออกไปยังคอนโซลหรือลูปจะทำงานอย่างไม่มีที่สิ้นสุดหรือไม่?
for(int i = 0; i > -1; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
คำตอบ: จะมี. ตัวแปร i จะถึงค่าสูงสุดไม่ช้าก็เร็ว และการเพิ่มขึ้นอีกจะเปลี่ยนเป็นค่าลบสูงสุด ซึ่งส่งผลให้เงื่อนไขการออกเป็นที่น่าพอใจ (i < = -1)
สำหรับแต่ละวง
เมื่อทำงานกับลูป บางครั้งคุณต้องวนซ้ำอาร์เรย์หรือคอลเลกชั่น โดยทั่วไปคุณสามารถวนซ้ำผ่านอาร์เรย์โดยใช้ for loop:public void printAllElements(String[] stringArray) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
}
และมันก็ถูกต้อง อย่างไรก็ตาม เพื่อวนซ้ำองค์ประกอบทั้งหมดของอาเรย์ทีละรายการ พวกเขาจึงได้มีโครงสร้าง forEach ขึ้นมา ลายเซ็นมีดังนี้:
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
// Loop body
}
คุณสามารถวนซ้ำอาร์เรย์ของสตริงและพิมพ์แต่ละรายการไปยังคอนโซลได้ด้วยวิธีต่อไปนี้:
public void printAllElements(String[] stringArray) {
for(String s : stringArray) {
System.out.println(s);
}
}
สั้นกระชับอีกด้วย ที่สำคัญไม่ต้องคิดเรื่องเคาน์เตอร์และสภาพทางออกทุกอย่างให้เราเรียบร้อยแล้ว
วิธีการใช้ลูป
ตอนนี้เรามาดูตัวอย่างบางส่วนของการใช้ for loop ใน Java เพื่อแก้ไขปัญหาต่างๆวงจรย้อนกลับ (จากใหญ่ไปเล็ก)
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
บทสรุป:
5
4
3
2
1
ตัวแปรหลายตัวและการเพิ่มตัวนับในตัวลูป
คุณสามารถใช้ตัวแปรหลายตัวใน for loop ได้ ตัวอย่างเช่น สามารถแปลงตัวแปรเหล่านั้นเป็นคำสั่ง counter ได้:int a = 0;
for(int i = 5; i > 0; i--, a++) {
System.out.print("Step: " + a + " Meaning: ");
System.out.println(i);
}
บทสรุป:
Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
หรือประกาศตัวแปรสองตัวแล้ววนซ้ำจนกว่าตัวแปรทั้งสองจะเท่ากัน:
for(int i = 5, j = 11; i != j; i++, j--) {
System.out.println("i: " + i + " j: " + j);
}
บทสรุป:
i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
ไม่น่าเป็นไปได้ที่การกระทำนี้จะมีคุณค่าใดๆ แต่การทราบเกี่ยวกับความเป็นไปได้นี้ก็มีประโยชน์ คุณยังสามารถสร้างลูปภายในภายใน for loop ได้ ในกรณีนี้ จำนวนขั้นตอนการวนซ้ำจะถูกคูณ:
for(int i = 0; i < 5; i++) {
System.out.print(i + " | ");
for(int j = 0; j < 5; j++) {
System.out.print(j + " ");
}
System.out.print('\n');
}
บทสรุป:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
3 | 0 1 2 3 4
4 | 0 1 2 3 4
ในลูปตัวนับj
สามารถเข้าถึงตัวนับของลูปด้านนอกได้ ซึ่งทำให้การวนซ้ำแบบซ้อนเป็นวิธีที่ดีเยี่ยมในการสำรวจอาร์เรย์สองมิติ สามมิติ และอาร์เรย์อื่นๆ:
int[][] array = { {0, 1, 2, 3, 4 },
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}};
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print('\n');
}
บทสรุป:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
เสร็จสิ้นวงจรก่อนเวลา
หากคุณต้องการขัดจังหวะลูปขณะประมวลผลลูป ให้ใช้ตัวดำเนินการbreak
ซึ่งหยุดเนื้อหาปัจจุบันของลูป การวนซ้ำครั้งต่อๆ ไปทั้งหมดจะถูกข้ามไปเช่นกัน:
public void getFirstPosition(String[] stringArray, String element) {
for (int i = 0; i < stringArray.length; i++) {
if(stringArray[i].equals(element)) {
System.out.println(i);
break;
}
}
}
วิธีการจะพิมพ์ตำแหน่งขององค์ประกอบที่ค้นหาแรกในอาร์เรย์:
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
บทสรุป:
1
วงจรที่ไม่มีที่สิ้นสุด
อีกวิธีหนึ่งในการสร้าง for loop แบบไม่มีที่สิ้นสุดคือการปล่อยให้พื้นที่การประกาศตัวนับ เงื่อนไขการออก และคำสั่งตัวนับว่างเปล่า:for (;;) {
}
แต่โปรดจำไว้ว่าในกรณีส่วนใหญ่ การวนซ้ำไม่สิ้นสุดถือเป็นหลักฐานของข้อผิดพลาดเชิงตรรกะ การวนซ้ำดังกล่าวจะต้องมีเงื่อนไขการออก 
GO TO FULL VERSION