พิจารณา:
int[][] multD = new int[5][];
multD[0] = new int[10];
นี่เป็นวิธีที่คุณสร้างอาร์เรย์สองมิติที่มี 5 แถวและ 10 คอลัมน์หรือไม่
ฉันเห็นรหัสนี้ออนไลน์ แต่ไวยากรณ์ไม่สมเหตุสมผล
พิจารณา:
int[][] multD = new int[5][];
multD[0] = new int[10];
นี่เป็นวิธีที่คุณสร้างอาร์เรย์สองมิติที่มี 5 แถวและ 10 คอลัมน์หรือไม่
ฉันเห็นรหัสนี้ออนไลน์ แต่ไวยากรณ์ไม่สมเหตุสมผล
คำตอบ:
ลองทำสิ่งต่อไปนี้:
int[][] multi = new int[5][10];
... ซึ่งเป็นมือสั้น ๆ สำหรับสิ่งนี้:
int[][] multi = new int[5][];
multi[0] = new int[10];
multi[1] = new int[10];
multi[2] = new int[10];
multi[3] = new int[10];
multi[4] = new int[10];
หมายเหตุว่าองค์ประกอบทุกคนจะเริ่มต้นได้ที่ค่าเริ่มต้นสำหรับint
, 0
ดังนั้นข้างต้นนอกจากนี้ยังเทียบเท่ากับ:
int[][] multi = new int[][]{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
new int[][]
ใน=new int[][]{...}
ตัวแปร? เราเขียนได้={...}
ไหม
new
คีย์เวิร์ดเท่านั้น
int array[][] = new int[3][];
VS int array[][] = new int[][3];
?? อันไหนถูกกฎหมายเพราะฉันได้อ่านทั้งสองรุ่นที่ไหนสักแห่ง
เราสามารถประกาศอาร์เรย์สองมิติและจัดเก็บองค์ประกอบโดยตรงในเวลาที่ประกาศเป็น:
int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};
ที่นี่intหมายถึงองค์ประกอบประเภทจำนวนเต็มเก็บไว้ในอาร์เรย์และชื่ออาร์เรย์คือ 'เครื่องหมาย' intเป็นประเภทข้อมูลสำหรับองค์ประกอบทั้งหมดที่อยู่ภายในวงเล็บปีกกา "{" และ "}" เพราะอาร์เรย์เป็นชุดขององค์ประกอบที่มีชนิดข้อมูลเดียวกัน
กลับมาที่คำแถลงของเราที่เขียนไว้ด้านบน: องค์ประกอบแต่ละแถวควรเขียนไว้ในเครื่องหมายปีกกา แถวและองค์ประกอบในแต่ละแถวควรคั่นด้วยเครื่องหมายจุลภาค
ตอนนี้สังเกตคำสั่ง: คุณสามารถรับมี 3 แถวและ 5 คอลัมน์ดังนั้น JVM สร้างหน่วยความจำ 3 * 5 = 15 บล็อก บล็อกเหล่านี้สามารถถูกอ้างอิงทีละตาว่า:
marks[0][0] marks[0][1] marks[0][2] marks[0][3] marks[0][4]
marks[1][0] marks[1][1] marks[1][2] marks[1][3] marks[1][4]
marks[2][0] marks[2][1] marks[2][2] marks[2][3] marks[2][4]
หมายเหตุ:
หากคุณต้องการเก็บnองค์ประกอบแล้วดัชนีอาร์เรย์เริ่มต้นจากศูนย์และสิ้นสุดที่n-1 อีกวิธีในการสร้างอาร์เรย์สองมิติคือการประกาศอาร์เรย์ก่อนแล้วจึงจัดสรรหน่วยความจำให้โดยใช้ตัวดำเนินการใหม่
int marks[][]; // declare marks array
marks = new int[3][5]; // allocate memory for storing 15 elements
โดยการรวมสองอย่างข้างต้นเราสามารถเขียน:
int marks[][] = new int[3][5];
คุณสามารถสร้างพวกเขาในแบบที่คนอื่นพูดถึง อีกหนึ่งจุดที่จะเพิ่ม: คุณสามารถสร้างอาเรย์สองมิติที่เบ้กับแต่ละแถวได้โดยไม่จำเป็นต้องมีจำนวนคอลโมลเท่ากันเช่นนี้
int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];
int array[][] = new int[3][];
VS int array[][] = new int[][3];
?? อันไหนถูกกฎหมายเพราะฉันได้อ่านทั้งสองรุ่นที่ไหนสักแห่ง
สำนวนที่พบบ่อยที่สุดในการสร้างอาร์เรย์สองมิติที่มี5แถวและ10คอลัมน์คือ:
int[][] multD = new int[5][10];
หรือคุณสามารถใช้สิ่งต่อไปนี้ซึ่งคล้ายกับสิ่งที่คุณมีมากขึ้นแม้ว่าคุณจะต้องเริ่มต้นแต่ละแถวอย่างชัดเจน:
int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
multD[i] = new int[10];
}
Object[][] ary2d = new Object[5][10];
คุณจะต้องเริ่มต้นองค์ประกอบแต่ละส่วนของอาร์เรย์ 2D
null
คดีอย่างปลอดภัยสำหรับการตรวจสอบเบื้องต้นใด ๆ คุณควรเริ่มต้นองค์ประกอบแต่ละส่วนหรือไม่นั้นขึ้นอยู่กับการออกแบบของคุณ นอกจากนี้เพื่อชี้แจง - primitives ไม่สามารถเป็นโมฆะและรับอินสแตนซ์เป็นค่าเริ่มต้นที่กำหนดไว้หากคุณไม่ได้มอบหมายให้ เช่นint
ไม่สามารถเป็นโมฆะและเมื่อคุณพูดint i;
โดยไม่กำหนดค่าระบบ0
จะใช้ค่าเริ่มต้นหนึ่งค่า อ่านเกี่ยวกับที่นี่
นอกจากนี้ยังเป็นไปได้ที่จะประกาศด้วยวิธีต่อไปนี้ มันไม่ใช่การออกแบบที่ดี แต่ใช้งานได้
int[] twoDimIntArray[] = new int[5][10];
ลอง:
int[][] multD = new int[5][10];
โปรดทราบว่าในรหัสของคุณเฉพาะบรรทัดแรกของอาร์เรย์ 2D เท่านั้นที่เริ่มต้นเป็น 0 บรรทัดที่ 2 ถึง 5 ไม่มีอยู่ หากคุณพยายามที่จะพิมพ์พวกเขาคุณจะได้รับnull
สำหรับทุกคน
int [][] twoDim = new int [5][5];
int a = (twoDim.length);//5
int b = (twoDim[0].length);//5
for(int i = 0; i < a; i++){ // 1 2 3 4 5
for(int j = 0; j <b; j++) { // 1 2 3 4 5
int x = (i+1)*(j+1);
twoDim[i][j] = x;
if (x<10) {
System.out.print(" " + x + " ");
} else {
System.out.print(x + " ");
}
}//end of for J
System.out.println();
}//end of for i
ใน Java อาร์เรย์สองมิติสามารถประกาศได้เช่นเดียวกับอาร์เรย์หนึ่งมิติ ในอาเรย์หนึ่งมิติคุณสามารถเขียนได้
int array[] = new int[5];
โดยที่ int เป็นชนิดข้อมูล array [] เป็นการประกาศอาร์เรย์และnew array
เป็นอาร์เรย์ที่มีวัตถุที่มีดัชนีห้าตัว
เช่นนั้นคุณสามารถเขียนอาร์เรย์สองมิติดังต่อไปนี้
int array[][];
array = new int[3][4];
นี่array
คือประเภทข้อมูล int ฉันได้ประกาศครั้งแรกในอาร์เรย์หนึ่งมิติของประเภทนั้นแล้วแถว 3 และ 4 คอลัมน์จะถูกสร้างขึ้น
ในรหัสของคุณ
int[][] multD = new int[5][];
multD[0] = new int[10];
หมายความว่าคุณได้สร้างอาร์เรย์สองมิติโดยมีห้าแถว ในแถวแรกมี 10 คอลัมน์ ใน Java คุณสามารถเลือกขนาดคอลัมน์สำหรับทุกแถวได้ตามต้องการ
int rows = 5;
int cols = 10;
int[] multD = new int[rows * cols];
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < cols; c++)
{
int index = r * cols + c;
multD[index] = index * 2;
}
}
สนุก!
ลองด้วยวิธีนี้:
int a[][] = {{1,2}, {3,4}};
int b[] = {1, 2, 3, 4};
อาร์เรย์ประเภทนี้เรียกว่า jagged arrays ใน Java:
int[][] multD = new int[3][];
multD[0] = new int[3];
multD[1] = new int[2];
multD[2] = new int[5];
ในสถานการณ์สมมตินี้แต่ละแถวของอาร์เรย์มีจำนวนคอลัมน์แตกต่างกัน ในตัวอย่างด้านบนแถวแรกจะมีสามคอลัมน์และแถวที่สองจะมีสองคอลัมน์และแถวที่สามมีห้าคอลัมน์ คุณสามารถเริ่มต้นอาร์เรย์นี้ในเวลารวบรวมเช่นด้านล่าง:
int[][] multD = {{2, 4, 1}, {6, 8}, {7, 3, 6, 5, 1}};
คุณสามารถวนองค์ประกอบทั้งหมดในอาร์เรย์ของคุณได้อย่างง่ายดาย:
for (int i = 0; i<multD.length; i++) {
for (int j = 0; j<multD[i].length; j++) {
System.out.print(multD[i][j] + "\t");
}
System.out.println();
}
จริงๆแล้ว Java ไม่มีอาเรย์หลายมิติในแง่คณิตศาสตร์ สิ่งที่ Java มีเพียงอาร์เรย์ของอาร์เรย์ซึ่งเป็นที่ที่แต่ละองค์ประกอบเป็นอาร์เรย์ นั่นคือเหตุผลที่ความต้องการที่แน่นอนในการเริ่มต้นมันคือขนาดของมิติแรก หากส่วนที่เหลือมีการระบุแล้วมันจะสร้างอาร์เรย์ที่มีค่าเริ่มต้น
int[][] ar = new int[2][];
int[][][] ar = new int[2][][];
int[][] ar = new int[2][2]; // 2x2 array with zeros
มันยังทำให้เราแปลกประหลาด ขนาดของอาร์เรย์ย่อยไม่สามารถเปลี่ยนแปลงได้โดยการเพิ่มองค์ประกอบเพิ่มเติม แต่เราสามารถทำได้โดยการกำหนดอาร์เรย์ใหม่ที่มีขนาดตามอำเภอใจ
int[][] ar = new int[2][2];
ar[1][3] = 10; // index out of bound
ar[1] = new int[] {1,2,3,4,5,6}; // works