การสำรวจอาร์เรย์
แนะนำใหม่| English | ความหมาย |
|---|---|
| traversal/træˈvɜːsl/ | การ遍历 ( traversal ) |
| enhanced for loop/enˈhænst fɔː luːp/ | enhanced for loop |
การ遍历ทุกองค์ประกอบ
- การ遍历 (traversal) เข้าถึงทุกองค์ประกอบของ array โดยทั่วไปจะเป็นตามลำดับ.
- ลูปที่มีดัชนีมาตรฐาน:
for (int i = 0; i < a.length; i++) { ... a[i] ... } iค่อยๆ ย้ายจาก0ไปยังlength - 1ดังนั้นa[i]จะเข้าถึงแต่ละองค์ประกอบหนึ่งครั้ง.- การ遍历เป็นรากฐานของอัลกอริทึม array ทุกชนิด.
for-each loop
- enhanced for loop (for-each) สำหรับ遍历แต่ละค่าโดยไม่ใช้ดัชนี:
for (int x : a) { ... x ... }—xรับค่าของแต่ละองค์ประกอบมาทีละตัว.- ชัดเจนขึ้นเมื่อคุณต้องการแค่ ค่า ไม่ใช่ตำแหน่ง.
- แต่มันไม่สามารถแก้ไข array หรือใช้ดัชนีได้.
ดัชนี vs. for-each
- ใช้ indexed loop เมื่อคุณต้องการตำแหน่ง
i, หรือเพื่อ แก้ไข องค์ประกอบ. - ใช้ for-each loop เมื่อคุณต้องการแค่ อ่าน ค่าแต่ละตัว.
a[i] = 0;ต้องใช้ indexed loop; การรวมค่าสามารถใช้ for-each ได้.- ทั้งสองแบบ遍历ทุกองค์ประกอบ — เลือกแบบที่เหมาะกับงาน.
ขอบเขตอีกครั้ง
- เงื่อนไขของ indexed loop คือ
i < a.lengthซึ่งทำให้iยังคงถูกต้อง. i <= a.lengthเกินไปหนึ่งจุด → ArrayIndexOutOfBoundsException.- for-each loop ไม่สามารถออกนอกขอบเขตได้ — มันจัดการช่วงให้คุณเอง.
- เมื่อคุณเขียนดัชนีเอง คุณต้องรับผิดชอบขอบเขตนั้น.
for-each loop อ่านค่าแต่ไม่สามารถเขียนกลับลงใน array ได้. for (int x : a) { x = 0; } เปลี่ยนเฉพาะสำเนาในท้องถิ่น x, ไม่ใช่ a — เพื่อลบค่าใน array เป็นศูนย์ คุณต้องใช้ indexed loop a[i] = 0;. ใช้ for-each เพื่อ อ่าน, indexed loop เพื่อ แก้ไข หรือเมื่อคุณต้องการตำแหน่ง i.
สองวิธีในการรวมค่า array:
- Indexed:
for (int i = 0; i < a.length; i++) { sum += a[i]; } - For-each:
for (int x : a) { sum += x; } - ทั้งสองให้ผลรวมเท่ากัน; for-each ชัดเจนกว่าเมื่อไม่จำเป็นต้องใช้ดัชนี.
การ遍历 (traversal) เข้าถึงทุกองค์ประกอบ. indexed loop (for (int i = 0; i < a.length; i++)) ให้ตำแหน่ง i และสามารถ แก้ไข a[i]; for-each loop (for (int x : a)) อ่าน ค่าแต่ละตัวอย่างชัดเจนแต่ไม่สามารถแก้ไข array หรือใช้ดัชนีได้. เลือกตามว่าต้องการดัชนีหรือแก้ไขหรือไม่.
การสำรวจอาร์เรย์เพื่อหาผลรวม
i เข้าถึงแต่ละดัชนี; sum รวบรวม a[i] (ที่นี่ a = {10,20,30})
เงื่อนไขที่ถูกต้องในการสำรวจอาร์เรย์ a ด้วยดัชนีคือ...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
อิน덱ซ์ที่ใช้ได้คือ 0..length-1 ดังนั้น i < a.length
คุณควรใช้ลูปใดหากต้องการแก้ไของค์ประกอบอาร์เรย์?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
for-each ไม่สามารถ assign กลับได้; ใช้ a[i] = ... กับลูปที่มีดัชนี
ใน for (int x : a) { x = 0; }, อาร์เรย์ a จะถูกตั้งให้เป็นศูนย์ทั้งหมด
Difficulty 1/5 · 100 coins + a small bonus on first completion today
x เป็นคัดลอกเฉพาะที่; อาร์เรย์ไม่เปลี่ยนแปลง
For-each loop for (int x : a) เหมาะที่สุดเมื่อคุณต้องการเพียง...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
for-each อ่านค่าได้อย่างสะอาดตาโดยไม่ต้องใช้ดัชนี
การเข้าเยี่ยมชมองค์ประกอบทุกตัวของอาร์เรย์เรียกว่าการ ___ (คำเดียว)
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การสำรวจเข้าเยี่ยมชมแต่ละองค์ประกอบ