İki boyutlu bir dizi oluşturmak için sözdizimi


438

Düşünmek:

int[][] multD = new int[5][];
multD[0] = new int[10];

5 satır ve 10 sütun içeren iki boyutlu bir dizi bu şekilde mi oluşturulur?

Bu kodu çevrimiçi gördüm, ancak sözdizimi anlamlı değildi.


yea ayrıca iki boyutlu diziyi ilk deyimde 10 sütuna sahip olarak tanımlayabilir. int [] [] multD = yeni int [5] [10];
committedandroider

Yanıtlar:


814

Takip etmeyi dene:

int[][] multi = new int[5][10];

... böyle bir şey için kısa bir el:

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

Her eleman için varsayılan değer başlatılır olacağı Not int, 0yukarıda da eşdeğerdir, böylece:

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

27
Eğlenceli bölüm, farklı satırlarda da farklı sütunlara sahip olabilmenizdir. Örneğin: - int [] [] multi = yeni int [5] []; multi [0] = yeni int [10]; multi [1] = yeni int [6]; multi [2] = new int [9] da mükemmel bir şekilde geçerlidir
JavaTec

2
Merhaba Muneeb, doğru anladıysam, çok boyutlu bir dizi, her satır için farklı sütun boyutu, nasıl değer atamak istiyoruz. Nasıl yapılır: int [] [] multi = yeni int [] [] {{1,2,3}, {1,2,3,4}, {1}}; bunlara erişebilir / yazdırabilirsiniz: for (int i = 0; i <multi.length; i ++) {for (int j = 0; j <multi [i] .length; j ++) {System.out.println ( "satır:" + i + "sütun:" + j + "değer:" + multi [i] [j]); }}
JavaTec

1
Kullandığımız gerekiyor mu new int[][]yılında =new int[][]{...}varyant? Sadece yazabilir miyiz ={...}?
Nawaz

2
@Nawaz Hayır, Diziler java'da Nesnedir ve bellek yalnızca newanahtar sözcükler kullanılarak Nesnelere ayrılmıştır .
roottraveller

1
@ Oldrinb int array[][] = new int[3][];VS hakkında ne int array[][] = new int[][3];?? her ikisini de bir yerde okuduğum için hangisi yasal.
roottraveller

77

İki boyutlu bir dizi bildirebilir ve bildirimi sırasında öğeleri doğrudan saklayabiliriz:

int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};

Burada int , dizide saklanan tamsayı türü öğelerini temsil eder ve dizi adı 'işaretler' dir. int , "{" ve "}" parantezlerinde temsil edilen tüm öğelerin veri tipidir, çünkü bir dizi aynı veri türüne sahip öğelerden oluşan bir koleksiyondur.

Yukarıda yazdığımız ifademize geri dönersek: her bir eleman sırası kıvırcık parantez içine yazılmalıdır. Her satırdaki satırlar ve öğeler virgülle ayrılmalıdır.

Şimdi ifadeyi gözlemleyin: 3 satır ve 5 sütun vardır, böylece JVM 3 * 5 = 15 bellek bloğu oluşturur. Bu bloklar ayrı ayrı şu şekilde ifade edilebilir:

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]


NOT: n öğeyi
saklamak istiyorsanız , dizi dizini sıfırdan başlar ve n-1'de biter . İki boyutlu bir dizi oluşturmanın başka bir yolu, önce diziyi bildirmek ve daha sonra yeni işleç kullanarak dizini ayırmaktır.

int marks[][];           // declare marks array
marks = new int[3][5];   // allocate memory for storing 15 elements

Yukarıdaki ikisini birleştirerek şunları yazabiliriz:

int marks[][] = new int[3][5];

Bence bu veri girmenin en kısa yolu.
thanos.a

51

Bunları, başkalarının bahsettiği şekilde oluşturabilirsiniz. Eklenecek bir nokta daha: Her satırda eğri iki boyutlu bir dizi bile oluşturabilirsiniz.

int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];

5
İyi dedi! Bağımsız başlatmanın en önemli yönü budur.
Ahamed

@Victor int array[][] = new int[3][];VS hakkında ne int array[][] = new int[][3];?? her ikisini de bir yerde okuduğum için hangisi yasal.
roottraveller

30

5 satır ve 10 sütun içeren iki boyutlu bir dizi oluşturmak için en yaygın deyim :

int[][] multD = new int[5][10];

Alternatif olarak, sahip olduğunuza daha çok benzeyen aşağıdakileri kullanabilirsiniz, ancak her satırı açıkça başlatmanız gerekir:

int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
  multD[i] = new int[10];
}

3
Ayrıca sadece ilkellerin başlatma gerektirmediğini de unutmayın. Diziyi bu şekilde bildirirseniz, Object[][] ary2d = new Object[5][10];yine de 2B dizinin her bir öğesini başlatmanız gerekir.
Armand

3
nullİlkel olmayanlar için davayı güvenli bir şekilde ele almadığınız sürece . Her bir öğeyi başlatmanız gerekip gerekmediği tamamen tasarımınıza bağlıdır. Ayrıca, sadece açıklığa kavuşturmak için - temel öğeler boş olamaz ve sizin tarafınızdan atanmamışsa, tanımlı bir varsayılan değere somutlaştırılamaz. Örnegin intnull olamaz ve int i;bir değer atamadan söylediğinizde , varsayılan değer 0kullanılır. Burada okuyun
bölünmez

Başka bir açıklama, varsayılan değerler sadece sınıf / örnek değişkenlere dağıtılır. Yerel değişkenler (iç yöntemler) kullanılmadan önce manuel olarak başlatılmalıdır.
bölünmez

12

Aşağıdaki şekilde beyan etmek de mümkündür. İyi bir tasarım değil, ama işe yarıyor.

int[] twoDimIntArray[] = new int[5][10];

9

Deneyin:

int[][] multD = new int[5][10];

Kodunuzda 2B dizinin yalnızca ilk satırının 0 olarak başlatıldığını unutmayın. Satır 2 ila 5 bile yoktur. Onları yazdırmaya çalışırsanız, nullherkes için alırsınız .


8
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

8

Java'da iki boyutlu bir dizi, tek boyutlu bir diziyle aynı olarak bildirilebilir. Tek boyutlu bir dizide şöyle yazabilirsiniz

  int array[] = new int[5];

Burada int bir veri türüdür, dizi [] bir dizi bildirimidir ve new arraynesneleri beş dizine sahip bir dizidir.

Bunun gibi, aşağıdaki gibi iki boyutlu bir dizi yazabilirsiniz.

  int array[][];
  array = new int[3][4];

İşte arraybir int veri türü. Öncelikle bu türlerin tek boyutlu bir dizi üzerinde ilan ettim, sonra 3 satır ve 4 sütun dizisi oluşturulur.

Kodunuzda

int[][] multD = new int[5][];
multD[0] = new int[10];

beş sıralı iki boyutlu bir dizi oluşturduğunuz anlamına gelir. İlk satırda 10 sütun vardır. Java'da her satır için istediğiniz sütun boyutunu seçebilirsiniz.


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

Zevk almak!


1
Bu, C gibi 2D dizileri desteklemeyen bir dilde yararlı olacaktır!
Alaa

3
C çok boyutlu dizileri de destekler.
Ricardo Cruz


3

Bu tür diziler Java'da tırtıklı diziler olarak bilinir:

int[][] multD = new int[3][];
multD[0] = new int[3];
multD[1] = new int[2];
multD[2] = new int[5];

Bu senaryoda, dizinin her satırı farklı sayıda sütun içerir. Yukarıdaki örnekte, ilk satır üç sütun, ikinci satır iki sütun ve üçüncü satır beş sütun içerecektir. Bu diziyi aşağıdaki gibi derleme zamanında başlatabilirsiniz:

 int[][] multD = {{2, 4, 1}, {6, 8}, {7, 3, 6, 5, 1}};

Dizinizdeki tüm öğeleri kolayca tekrarlayabilirsiniz:

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

0

Aslında Java'nın matematiksel anlamda çok boyutlu bir dizisi yoktur. Java'nın sahip olduğu sadece diziler dizisidir, her öğenin de bir dizi olduğu bir dizidir. Bu nedenle, onu başlatmak için mutlak gereklilik, ilk boyutun boyutudur. Gerisi belirtilirse, varsayılan değerle doldurulmuş bir dizi oluşturur.

int[][]   ar  = new int[2][];
int[][][] ar  = new int[2][][];
int[][]   ar  = new int[2][2]; // 2x2 array with zeros

Ayrıca bize tuhaflık veriyor. Alt dizinin boyutu daha fazla öğe eklenerek değiştirilemez, ancak bunu yeni bir keyfi boyut dizisi atayarak yapabiliriz.

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