Java'da çok boyutlu bir diziyi başlatma


81

Ç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:


64

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 yve 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 .xy

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.


105

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, arrbasitç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]]]"

Yararlı makaleler


3
Bu nasıl "gerçek" çok boyutlu bir dizi değil?
dhardy

13
"Gerçek" çok boyutlu dizilerle "pürüzlü olmayan" dizileri kastediyorum. Tırtıklı diziler ve "gerçek" çok boyutlu diziler arasındaki fark için, bu soruya bakın .
aioobe

2
An'ın 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.
Milosz

Arrays.deepToString'den bahsettiğiniz için teşekkür ederiz.
samir105

60

Aşağıdaki yapıyı da kullanabilirsiniz:

String[][] myStringArray = new String [][] { { "X0", "Y0"},
                                             { "X1", "Y1"},
                                             { "X2", "Y2"},
                                             { "X3", "Y3"},
                                             { "X4", "Y4"} };

13

Ç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"}};

9

Java'da Çok Boyutlu Dizi

Çok boyutlu bir dizi döndürme

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:

  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;
    

    Tahsis etmezseniz, diyelim num[2][1], başlatılmaz ve sonra otomatik olarak 0 tahsis edilir, yani otomatik olarak num[2][1] = 0;

  3. Aşağıda num1.lengthsize satırlar verir.

  4. While num1[0].lengthsize ile ilgili elemanların sayısını verir num1[0]. Burada num1[0]ilgili diziler var num1[0][0]ve num[0][1]sadece.

  5. Burada forhesaplamamıza yardımcı olan bir döngü kullandık num1[i].length. Burada ibir 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]);
            }
        }
    }
    

4

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.


1
 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


-3

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}
                       }
                    };      

2
Bu bir cevap mı yoksa ne?
maytham-ɯɐɥʇʎɐɯ

7
Öyleyse umarım onu ​​yemeye açtır
maytham-ɯɐɥʇʎɐɯ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.