“你好,我最聰明的學生!”
“你好,瑞希!”
“你是否渴望關於數組的新討論?好吧,今天我們為你準備了一個!今天我要告訴你關於鋸齒狀數組和多維數組。”
“聽起來嗜血又可怕。”
“別擔心,一個真正的程序員總是可以處理數組,即使它露出牙齒。開個玩笑,數組的鋸齒反映了不僅可以交換二維數組的行,還可以構造數組的能力然而它必須如此。
“假設您希望二維數組的第一行長度為 10,第二行長度為 50。”
“你真的可以嗎?”
“當然!首先,我們創建一個‘容器的容器’——這是第一個數組,它將存儲對行數組的引用。這是如何完成的:
int[][] name = new int[height][];
“您只需省略第二個維度,Java 機器就會創建一個容器容器。這就是執行此代碼後內存中的內容:
“而且,你已經知道如何創建一維數組 🙂
這就是生成的代碼的樣子:
|
二維數組 第零行是一個 10 元素數組第一行是一個 50 元素數組 |
“我們剛剛創建了一個所謂的“鋸齒狀”陣列。它的邊緣粗糙且不規則。
“而如果我們現在想在屏幕上顯示這個數組的所有元素,那麼數組的length
數組就派上用場了:畢竟數組的行的長度是不同的。
“對了,你能告訴我如何在我們的示例中找到'container of containers'的長度嗎?它也是一個數組對象,這意味著它有一個長度。”
“大概吧matrix.length
?”
“完全正確!對於形成行的數組,我們將用於matrix[0].length
第零行。”
“首先,這意味著我們會使用matrix[1].length
?”
“非常正確,在第一種情況下,執行命令會產生10,而在第二種情況下,結果將是50。
使用二維數組
“現在讓我們嘗試顯示一個二維數組:
|
創建數組 用值填充數組 迭代數組行的外循環。 迭代單行單元格的內部循環。 |
“如您所見,我們需要兩個嵌套循環。第一個我們稱為 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
}
}
“這只是創建一個數組!然後你還需要以某種方式使用它。”
“我收回我說過的話。與他們合作並不容易。但這是可能的。”
“既然有可能,這裡有一個額外的任務。編寫代碼來顯示三維數組中的所有值。你知道的足夠多了。最主要的是要有耐心和細心。或者可能是足智多謀(有一個秘密位將幫助您在一行中解決此任務的知識)。但無論您如何解決它,請解決它。”
“謝謝你,Rishi。我會試試的。”
GO TO FULL VERSION