"สวัสดีนักเรียนที่ฉลาดที่สุดของฉัน!"

“สวัสดี ริชิ!”

"คุณกำลังสนใจการสนทนาใหม่เกี่ยวกับอาร์เรย์หรือไม่ วันนี้เรามีหนึ่งสำหรับคุณ วันนี้ฉันจะบอกคุณเกี่ยวกับอาร์เรย์หยักและหลายมิติ"

"ฟังดูกระหายเลือดและน่ากลัว"

"อย่ากังวล โปรแกรมเมอร์ตัวจริงสามารถจัดการกับอาร์เรย์ได้เสมอ แม้ว่ามันจะยากแค่ไหนก็ตาม นอกเรื่องตลก ความหยักของอาร์เรย์ยังสะท้อนถึงความสามารถที่ไม่เพียงแต่จะสลับแถวของอาร์เรย์สองมิติเท่านั้น แต่ยังรวมถึงการสร้างอาร์เรย์ด้วย อย่างไรก็ตามจะต้องมี

"สมมติว่าคุณต้องการให้แถวแรกของอาร์เรย์สองมิติมีความยาว 10 และแถวที่สองมีความยาว 50"

"ทำได้จริงๆหรอ"

"แน่นอน! ขั้นแรก เราสร้าง 'คอนเทนเนอร์ของคอนเทนเนอร์' — นี่คืออาร์เรย์แรก ซึ่งจะจัดเก็บการอ้างอิงไปยังอาร์เรย์ของแถว นี่คือวิธีการ:

int[][] name = new int[height][];

"คุณเพียงละเว้นมิติที่สองและเครื่อง Java จะสร้างคอนเทนเนอร์ของคอนเทนเนอร์ นี่คือสิ่งที่จะอยู่ในหน่วยความจำหลังจากรันโค้ดนี้:

"และคุณรู้วิธีสร้างอาร์เรย์หนึ่งมิติแล้ว 🙂

นี่คือลักษณะโค้ดที่ได้จะมีลักษณะดังนี้:

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
อาร์เรย์สองมิติ

แถวที่ 0 เป็นอาร์เรย์ของ10องค์ประกอบ
แถวแรกคืออาร์เรย์ของ50องค์ประกอบ

"เราเพิ่งสร้างอาร์เรย์ที่เรียกว่า"หยัก"ขอบของมันขรุขระและไม่สม่ำเสมอ

"และถ้าตอนนี้เราต้องการแสดงองค์ประกอบทั้งหมดของอาร์เรย์นี้บนหน้าจอ อาร์เรย์ของอาร์เรย์ก็lengthจะมีประโยชน์ เพราะท้ายที่สุดแล้ว ความยาวของแถวของอาร์เรย์จะแตกต่างกัน

"ยังไงก็ตาม คุณช่วยบอกวิธีหาความยาวของ 'คอนเทนเนอร์ของคอนเทนเนอร์' ในตัวอย่างของเราได้ไหม มันยังเป็นวัตถุอาร์เรย์ ซึ่งหมายความว่ามีความยาว"

"น่าจะmatrix.length?"

"ค่อนข้างถูกต้อง! และสำหรับอาร์เรย์ที่สร้างแถว เราจะใช้matrix[0].lengthสำหรับแถวที่ 0"

“อย่างแรกหมายความว่าเราจะใช้matrix[1].length?”

"ค่อนข้างถูกต้อง ในกรณีแรก การดำเนินการคำสั่งจะให้ผลลัพธ์ 10 และในกรณีที่สอง ผลลัพธ์จะเป็น 50

การทำงานกับอาร์เรย์สองมิติ

"ตอนนี้ลองแสดงอาร์เรย์สองมิติ:

int[][] matrix = new int[3][];
matrix[0] = {1, 2, 3, 4, 5, 6};
matrix[1] = {1, 2, 3};
matrix[2] = {1};
for (int i = 0; i < matrix.length; i++)
{
   for (int j = 0; j < matrix[i].length; j++)
      System.out.print( matrix[i][j] + " " );
   System.out.println();
}
สร้างอาร์เรย์
เติมอาร์เรย์ด้วยค่า


Outer loop ที่วนซ้ำแถวของอาร์เรย์
วงในที่วนซ้ำไปซ้ำมาในเซลล์ของแถวเดียว

"อย่างที่คุณเห็น เราต้องการลูปที่ซ้อนกัน 2 ลูป อันแรกเรียกว่า outer และอันที่สอง- inner

"ในวงรอบนอก ( iตัวแปร) เราจะผ่านแถวทั้งหมด (อาร์เรย์) ที่ประกอบกันเป็นอาร์เรย์สองมิติตามลำดับ แต่ละค่าของiสอดคล้องกับแถวที่มีดัชนีนั้น

"ในวงใน ( jตัวแปร) เราวนซ้ำเซลล์ทั้งหมดในแถว ขอบคุณวงใน แถวซึ่งประกอบด้วยค่าของอาร์เรย์หนึ่งมิติจะแสดงบนหน้าจอ

"นี่คือสิ่งที่จะแสดง:

มีการประมวลผลหนึ่งบรรทัดของอาร์เรย์ 1 2 3 4 5 6
มีการประมวลผลอาร์เรย์สองบรรทัด 1 2 3 4 5 6
1 2 3
มีการประมวลผลอาร์เรย์สามบรรทัด 1 2 3 4 5 6
1 2 3
1

อาร์เรย์หลายมิติ

"อามีโก้! คุณเดาออกไหมว่าถ้ามีอาร์เรย์สองมิติ มันก็มีสามมิติได้เช่นกัน?

"ฉันแค่คิดเกี่ยวกับเรื่องนี้ แต่ก็อายที่จะถาม

"ใช่ คุณสามารถสร้างอาร์เรย์สามมิติ และโดยทั่วไป อาร์เรย์ของมิติใดก็ได้ อาร์เรย์ดังกล่าวเรียกว่า 'หลายมิติ' เพื่อความสนุก มาสร้างอาร์เรย์หลายมิติที่มี 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
  }
}

"และนั่นเป็นเพียงการสร้างอาร์เรย์! จากนั้นคุณก็ต้องทำงานกับมันด้วยวิธีใดวิธีหนึ่ง"

"ฉันเอาคืนสิ่งที่ฉันพูด มันไม่ง่ายเลยที่จะร่วมงานกับพวกเขา แต่มันเป็นไปได้"

"เนื่องจากเป็นไปได้ นี่เป็นงานโบนัส เขียนโค้ดที่แสดงค่าทั้งหมดในอาร์เรย์สามมิติ คุณรู้ดีพอที่จะทำเช่นนี้ สิ่งสำคัญคือต้องอดทนและเอาใจใส่ หรืออาจจะเป็นคนมีไหวพริบ (มีบิตลับ ความรู้ที่จะช่วยคุณแก้ปัญหานี้ในบรรทัดเดียว) แต่ไม่ว่าจะแก้อย่างไรก็แก้"

"ขอบคุณนะริชิ ฉันจะพยายาม"