Çok boyutlu bir dizi bildirmenin ve ona değerler atamanın doğru yolu nedir?
Sahip olduğum şey bu:
int x = 5;
int y = 5;
String[][] myStringArray = new String [x][y];
myStringArray[0][x] = "a string";
myStringArray[0][y] = "another string";
Çok boyutlu bir dizi bildirmenin ve ona değerler atamanın doğru yolu nedir?
Sahip olduğum şey bu:
int x = 5;
int y = 5;
String[][] myStringArray = new String [x][y];
myStringArray[0][x] = "a string";
myStringArray[0][y] = "another string";
Yanıtlar:
Uygun satırları şunlarla değiştirmeyi deneyin:
myStringArray[0][x-1] = "a string";
myStringArray[0][y-1] = "another string";
Kodunuz yanlıştır çünkü alt diziler bir uzunluğa sahiptir y
ve indeksleme 0'dan başlar. Bu nedenle , indisler ve sınırların dışında olduğu için ayarlama myStringArray[0][y]
veya myStringArray[0][x]
başarısız olur .x
y
String[][] myStringArray = new String [x][y];
dikdörtgen çok boyutlu bir diziyi başlatmanın doğru yoludur. Eğer pürüzlü olmasını istiyorsanız (her alt dizinin potansiyel olarak farklı bir uzunluğu vardır), o zaman bu cevaba benzer bir kod kullanabilirsiniz . Bununla birlikte, John'un alt dizileri manuel olarak oluşturmanız gerektiğine dair iddiasının, mükemmel dikdörtgen çok boyutlu bir dizi istediğinizde yanlış olduğunu unutmayın.
Java'nın "gerçek" çok boyutlu dizileri yoktur.
Örneğin arr[i][j][k]
, eşdeğerdir ((arr[i])[j])[k]
. Başka bir deyişle, arr
basitçe bir dizi, dizilerden, dizilerden oluşur .
Yani, dizilerin nasıl çalıştığını biliyorsanız, çok boyutlu dizilerin nasıl çalıştığını bilirsiniz!
Beyanname:
int[][][] threeDimArr = new int[4][5][6];
veya başlatma ile:
int[][][] threeDimArr = { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } };
Giriş:
int x = threeDimArr[1][0][1];
veya
int[][] row = threeDimArr[1];
Dize gösterimi:
Arrays.deepToString(threeDimArr);
verim
"[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]"
int[i][j][k]
uzunluğu vardır i
, bu yüzden gerçekten bir ((int[k])[j])[i]
. Bildirimdeki boyutlar, türlere göre geriye doğru yazılmıştır, çok boyutlu dizileri matematikteki matrislere daha çok benzetmeyi düşünüyorum.
Çok boyutlu dizileri şu şekilde tanımlayabilirsiniz:
// 4 x 5 String arrays, all Strings are null
// [0] -> [null,null,null,null,null]
// [1] -> [null,null,null,null,null]
// [2] -> [null,null,null,null,null]
// [3] -> [null,null,null,null,null]
String[][] sa1 = new String[4][5];
for(int i = 0; i < sa1.length; i++) { // sa1.length == 4
for (int j = 0; j < sa1[i].length; j++) { //sa1[i].length == 5
sa1[i][j] = "new String value";
}
}
// 5 x 0 All String arrays are null
// [null]
// [null]
// [null]
// [null]
// [null]
String[][] sa2 = new String[5][];
for(int i = 0; i < sa2.length; i++) {
String[] anon = new String[ /* your number here */];
// or String[] anon = new String[]{"I'm", "a", "new", "array"};
sa2[i] = anon;
}
// [0] -> ["I'm","in","the", "0th", "array"]
// [1] -> ["I'm", "in", "another"]
String[][] sa3 = new String[][]{ {"I'm","in","the", "0th", "array"},{"I'm", "in", "another"}};
Java gerçekten değil çok boyutlu dizileri desteklemez. Java'da, iki boyutlu bir dizi, basitçe bir dizi dizisidir, üç boyutlu bir dizi, bir dizi dizisidir, dört boyutlu bir dizi, dizi dizilerinin dizilerinden oluşan bir dizidir, vb ...
İki boyutlu bir diziyi şu şekilde tanımlayabiliriz:
int[ ] num[ ] = {{1,2}, {1,2}, {1,2}, {1,2}}
int[ ][ ] num = new int[4][2]
num[0][0] = 1;
num[0][1] = 2;
num[1][0] = 1;
num[1][1] = 2;
num[2][0] = 1;
num[2][1] = 2;
num[3][0] = 1;
num[3][1] = 2;
Tahsis etmezseniz, diyelim num[2][1]
, başlatılmaz ve sonra otomatik olarak 0 tahsis edilir, yani otomatik olarak num[2][1] = 0
;
Aşağıda num1.length
size satırlar verir.
While num1[0].length
size ile ilgili elemanların sayısını verir num1[0]
. Burada num1[0]
ilgili diziler var num1[0][0]
ve num[0][1]
sadece.
Burada for
hesaplamamıza yardımcı olan bir döngü kullandık num1[i].length
. Burada i
bir döngü boyunca artırılır.
class array
{
static int[][] add(int[][] num1,int[][] num2)
{
int[][] temp = new int[num1.length][num1[0].length];
for(int i = 0; i<temp.length; i++)
{
for(int j = 0; j<temp[i].length; j++)
{
temp[i][j] = num1[i][j]+num2[i][j];
}
}
return temp;
}
public static void main(String args[])
{
/* We can define a two-dimensional array as
1. int[] num[] = {{1,2},{1,2},{1,2},{1,2}}
2. int[][] num = new int[4][2]
num[0][0] = 1;
num[0][1] = 2;
num[1][0] = 1;
num[1][1] = 2;
num[2][0] = 1;
num[2][1] = 2;
num[3][0] = 1;
num[3][1] = 2;
If you don't allocate let's say num[2][1] is
not initialized, and then it is automatically
allocated 0, that is, automatically num[2][1] = 0;
3. Below num1.length gives you rows
4. While num1[0].length gives you number of elements
related to num1[0]. Here num1[0] has related arrays
num1[0][0] and num[0][1] only.
5. Here we used a 'for' loop which helps us to calculate
num1[i].length, and here i is incremented through a loop.
*/
int num1[][] = {{1,2},{1,2},{1,2},{1,2}};
int num2[][] = {{1,2},{1,2},{1,2},{1,2}};
int num3[][] = add(num1,num2);
for(int i = 0; i<num1.length; i++)
{
for(int j = 0; j<num1[j].length; j++)
System.out.println("num3[" + i + "][" + j + "]=" + num3[i][j]);
}
}
}
Boyutları okumak isterseniz şunu da ekleyeceğim:
int[][][] a = new int[4][3][2];
System.out.println(a.length); // 4
System.out.println(a[0].length); // 3
System.out.println(a[0][0].length); //2
Ayrıca , farklı satırların farklı uzunluklara sahip olduğu tırtıklı dizilere de sahip olabilirsiniz a[0].length != a[1].length
.
int[][] myNums = { {1, 2, 3, 4, 5, 6, 7}, {5, 6, 7, 8, 9, 10, 11} };
for (int x = 0; x < myNums.length; ++x) {
for(int y = 0; y < myNums[i].length; ++y) {
System.out.print(myNums[x][y]);
}
}
Çıktı
1 2 3 4 5 6 7 5 6 7 8 9 10 11
Başlamak için buna bakabilirsiniz:
int [][][] i = { //third dimension curly brace
{ // second dimension curly brace
{ //first dimension curly brace
1,1,1 //elements
},
{3,3,3},
{2,2,2}
},
{
{
1,1,1
},
{3,3,3},
{2,2,2}
}
};