"สวัสดีนักเรียนที่ฉลาดที่สุดของฉัน!"
“สวัสดี ริชิ!”
"คุณกำลังสนใจการสนทนาใหม่เกี่ยวกับอาร์เรย์หรือไม่ วันนี้เรามีหนึ่งสำหรับคุณ วันนี้ฉันจะบอกคุณเกี่ยวกับอาร์เรย์หยักและหลายมิติ"
"ฟังดูกระหายเลือดและน่ากลัว"
"อย่ากังวล โปรแกรมเมอร์ตัวจริงสามารถจัดการกับอาร์เรย์ได้เสมอ แม้ว่ามันจะยากแค่ไหนก็ตาม นอกเรื่องตลก ความหยักของอาร์เรย์ยังสะท้อนถึงความสามารถที่ไม่เพียงแต่จะสลับแถวของอาร์เรย์สองมิติเท่านั้น แต่ยังรวมถึงการสร้างอาร์เรย์ด้วย อย่างไรก็ตามจะต้องมี
"สมมติว่าคุณต้องการให้แถวแรกของอาร์เรย์สองมิติมีความยาว 10 และแถวที่สองมีความยาว 50"
"ทำได้จริงๆหรอ"
"แน่นอน! ขั้นแรก เราสร้าง 'คอนเทนเนอร์ของคอนเทนเนอร์' — นี่คืออาร์เรย์แรก ซึ่งจะจัดเก็บการอ้างอิงไปยังอาร์เรย์ของแถว นี่คือวิธีการ:
int[][] name = new int[height][];
"คุณเพียงละเว้นมิติที่สองและเครื่อง Java จะสร้างคอนเทนเนอร์ของคอนเทนเนอร์ นี่คือสิ่งที่จะอยู่ในหน่วยความจำหลังจากรันโค้ดนี้:

"และคุณรู้วิธีสร้างอาร์เรย์หนึ่งมิติแล้ว 🙂
นี่คือลักษณะโค้ดที่ได้จะมีลักษณะดังนี้:
|
อาร์เรย์สองมิติ แถวที่ 0 เป็นอาร์เรย์ของ 10 องค์ประกอบแถวแรกคืออาร์เรย์ของ 50 องค์ประกอบ |
"เราเพิ่งสร้างอาร์เรย์ที่เรียกว่า"หยัก"ขอบของมันขรุขระและไม่สม่ำเสมอ
"และถ้าตอนนี้เราต้องการแสดงองค์ประกอบทั้งหมดของอาร์เรย์นี้บนหน้าจอ อาร์เรย์ของอาร์เรย์ก็length
จะมีประโยชน์ เพราะท้ายที่สุดแล้ว ความยาวของแถวของอาร์เรย์จะแตกต่างกัน
"ยังไงก็ตาม คุณช่วยบอกวิธีหาความยาวของ 'คอนเทนเนอร์ของคอนเทนเนอร์' ในตัวอย่างของเราได้ไหม มันยังเป็นวัตถุอาร์เรย์ ซึ่งหมายความว่ามีความยาว"
"น่าจะmatrix.length
?"
"ค่อนข้างถูกต้อง! และสำหรับอาร์เรย์ที่สร้างแถว เราจะใช้matrix[0].length
สำหรับแถวที่ 0"
“อย่างแรกหมายความว่าเราจะใช้matrix[1].length
?”
"ค่อนข้างถูกต้อง ในกรณีแรก การดำเนินการคำสั่งจะให้ผลลัพธ์ 10 และในกรณีที่สอง ผลลัพธ์จะเป็น 50
การทำงานกับอาร์เรย์สองมิติ
"ตอนนี้ลองแสดงอาร์เรย์สองมิติ:
|
สร้างอาร์เรย์ เติมอาร์เรย์ด้วยค่า Outer loop ที่วนซ้ำแถวของอาร์เรย์ วงในที่วนซ้ำไปซ้ำมาในเซลล์ของแถวเดียว |
"อย่างที่คุณเห็น เราต้องการลูปที่ซ้อนกัน 2 ลูป อันแรกเรียกว่า outer และอันที่สอง- inner
"ในวงรอบนอก ( i
ตัวแปร) เราจะผ่านแถวทั้งหมด (อาร์เรย์) ที่ประกอบกันเป็นอาร์เรย์สองมิติตามลำดับ แต่ละค่าของi
สอดคล้องกับแถวที่มีดัชนีนั้น
"ในวงใน ( j
ตัวแปร) เราวนซ้ำเซลล์ทั้งหมดในแถว ขอบคุณวงใน แถวซึ่งประกอบด้วยค่าของอาร์เรย์หนึ่งมิติจะแสดงบนหน้าจอ
"นี่คือสิ่งที่จะแสดง:
มีการประมวลผลหนึ่งบรรทัดของอาร์เรย์ | 1 2 3 4 5 6 |
มีการประมวลผลอาร์เรย์สองบรรทัด | 1 2 3 4 5 6 |
มีการประมวลผลอาร์เรย์สามบรรทัด | 1 2 3 4 5 6 |
อาร์เรย์หลายมิติ
"อามีโก้! คุณเดาออกไหมว่าถ้ามีอาร์เรย์สองมิติ มันก็มีสามมิติได้เช่นกัน?
"ฉันแค่คิดเกี่ยวกับเรื่องนี้ แต่ก็อายที่จะถาม
"ใช่ คุณสามารถสร้างอาร์เรย์สามมิติ และโดยทั่วไป อาร์เรย์ของมิติใดก็ได้ อาร์เรย์ดังกล่าวเรียกว่า 'หลายมิติ' เพื่อความสนุก มาสร้างอาร์เรย์หลายมิติที่มี 4 มิติกัน
int[][][][] matrix = new int[2][3][4][5];
"นั่นดูเหมือนจะไม่ยากมาก!"
"คุณยังไม่ได้ลองสร้างด้วยตนเองเลย! เชิญชมสิ่งนี้:
int[][][][] matrix;
matrix = new int[2][][][]; // Create a 2-element array of references to references to references
for (int i = 0; i < matrix.length; i++)
{
matrix[i] = new int[3][][]; // Create a 3-element array of references to references
for (j = 0; j < matrix[i].length; j++)
{
matrix[i][j] = new int[4][]; // Create a 4-element array of references
for (k = 0; k < matrix[i][j].length; k++)
matrix[i][j][k] = new int[5]; // Create 5-element arrays of integers
}
}
"และนั่นเป็นเพียงการสร้างอาร์เรย์! จากนั้นคุณก็ต้องทำงานกับมันด้วยวิธีใดวิธีหนึ่ง"
"ฉันเอาคืนสิ่งที่ฉันพูด มันไม่ง่ายเลยที่จะร่วมงานกับพวกเขา แต่มันเป็นไปได้"
"เนื่องจากเป็นไปได้ นี่เป็นงานโบนัส เขียนโค้ดที่แสดงค่าทั้งหมดในอาร์เรย์สามมิติ คุณรู้ดีพอที่จะทำเช่นนี้ สิ่งสำคัญคือต้องอดทนและเอาใจใส่ หรืออาจจะเป็นคนมีไหวพริบ (มีบิตลับ ความรู้ที่จะช่วยคุณแก้ปัญหานี้ในบรรทัดเดียว) แต่ไม่ว่าจะแก้อย่างไรก็แก้"
"ขอบคุณนะริชิ ฉันจะพยายาม"
GO TO FULL VERSION