Anotasyon

Temel Java Dersleri – Çok Boyutlu Diziler

Merhaba Arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize Temel Java Dersleri serisi altında Çok Boyutlu Diziler (Multidimensional Arrays) konusu ile devam ediyoruz.

Önceki derslerde görmüş olduğumuz tek boyutlu diziler tek bir sütunda verileri tutmaktadır. Çok boyutlu diziler ise birden fazla sütunda verileri tutmaktadır. Bu şekilde tanımlanan array tiplerinde daha çok matriksler veya tablo yapıları tutulmaktadır. Genel olarak çok boyutlu diziler aşağıdaki şekilde tanımlanmaktadır.

DegiskenTipi[][] degiskenAdi;

DegiskenTipi degiskenAdi[][]; //geçerli fakat tercih edilmeyen kullanım.

Yukarıdaki koddan da göreceğiniz gibi iki şekildede tanılama yapmak mümkün, ikinci satırdaki tanımlama kodu okurken karmaşıklığa sebebiyet vermesinden dolayı kullanımı tavsiye edilmemektedir. Genel tanımlamalar yapının nasıl kurulacağıyla ilgili bilgi vermektedir. Şimdi ise aşağıda Java değişken tipleri ile nasıl çok boyutlu diziler tanımlanacağına bakalım;

int[][] matriks;
String[][] tablo;
double[][] degerler;

Yukarıdaki şekilde java değişlen tipinde çok boyutlu diziler tanımlanabilir. Tanımladığımız çok boyutlu diziler içersine farklı şekillerde değer atayabiliriz. Şöyle ki;

private void multidimensionalArrayTest() {
   String[][] mobilhanemYazarlari = {
      {"Alper", "Beyler"},
      {"Alper", "Öcal"},
      {"Aycan", "Ayhan"},
      {"Enes", "Ateş"}
      {"Eren", "Başaran"},
      {"Taha", "Kırca"},
      {"Vehbi", "Akdoğan"},
      {"Yiğit", "Serin"},     
   }
   stringArrayPrinter(mobilhanemYazarlari);

   String[][] mobilhanemYazarlariListesi = new String[8][2];
   mobilhanemYazarlariListesi[0][0] = "Alper";
   mobilhanemYazarlariListesi[0][1] = "Beyler";
   mobilhanemYazarlariListesi[1][0] = "Alper";
   mobilhanemYazarlariListesi[1][1] = "Öcal";
   mobilhanemYazarlariListesi[2][0] = "Aycan";
   mobilhanemYazarlariListesi[2][1] = "Ayhan";
   mobilhanemYazarlariListesi[3][0] = "Enes";
   mobilhanemYazarlariListesi[3][1] = "Ateş";
   mobilhanemYazarlariListesi[4][0] = "Eren";
   mobilhanemYazarlariListesi[4][1] = "Başaran";
   mobilhanemYazarlariListesi[5][0] = "Taha";
   mobilhanemYazarlariListesi[5][1] = "Kırca";
   mobilhanemYazarlariListesi[6][0] = "Vehbi";
   mobilhanemYazarlariListesi[6][1] = "Akdoğan";
   mobilhanemYazarlariListesi[7][0] = "Yiğit";
   mobilhanemYazarlariListesi[7][1] = "Serin";

   stringArrayPrinter(mobilhanemYazarlariListesi);
}

private void stringArrayPrinter(String[][] strArray) {
   int rowSize = strArray.length;
   for(int row=0; row<rowSize; row++) {
      int columnSize = strArray[row].length;
      for(int column=0; column<columnSize; column++) {
         System.out.print(strArray[row][column] + " ");
      }
      System.out.println();
   }
System.out.println("------------------------------");
}

Yukarıdaki örnekte “mobilhanemYazarlari” ve “mobilhanemYazarlariListesi” değişkenleri farklı yöntemlerle tanımlanmış olsa da aynı verileri içermektedir. Metotları örnek bir sınıf içerisinde çalıştırdığımızda çıktılarının aynı olduğunu görebiliriz. Bu örnekte String veri tipinde çok boyutlu dizi oluşturduk, bir sonraki örnekte int veri tipinde çok boyutlu dizi oluşturarak devam edeceğiz.

Karmaşık Diziler

Çok boyutlu dizilerin bir özelliğide karmaşık yapıda tanımlanabilmesidir. Karmaşık dizilere örneğimizi int veri tipi üzerinden yazacağımız kod parçasıyla vereceğiz.

private void multiDimensionalArrayTest() {
   int[][] numberArray = {
      {0},
      {1,2},
      {3,4,5},
      {6,7,8,9},
   }
}

private void intArrayPrinter(int[][] intArray) {
   int rowSize = intArray.length;
   for(int row=0; row<rowSize; row++) {
      int columnSize = intArray[row].length;
      for(int column=0; column<columnSize; column++) {
         System.out.println("int[" + row + "][" + column + "]: " + intArray[row][column]);)
      }
   }
}

Yukarıdaki örneğin kodunu inceledikten sonra çıktısını incelediğimizde rahat bir şekilde hangi indekse hangi değerin atadığını görebiliriz. Burada dikkat edilmesini gereken nokta, çok boyutlu dizi de sütun sayısının değişken olduğudur. Önceki çok boyutlu String dizi örneğimizde sütun sayısı değişmezken bu örnekte rastgele sütun sayıları ile işlem yapılmıştır. Yalnız Java’da çok boyutlu dizilerde değişken tanımlaması yaparken satır sayısını sabit verip sütun sayısını vermeden işlem yapabilirken, sütun sayısını sabit verip satır sayısını vermeden tanımlama yaptığımızda hata ile karşılaşacağımızı aklımızın bir köşesine yazmamız gerekmektedir. Kısa bir kod parçasıyla açıklamak gerekirse;

int[][] foo = new int[3][]; //doğru tanımlama
int[][] foo1 = new int[][3]; // hatalı tanımlama
int[][] foo2 = new int[][]; //hatalı tanımlama

Java’da çok boyutlu diziler tanımlanırken mutlaka initialize edilmelidir. Aksi takdirde geliştirme anında hata ile karşılaşılır.

Şimdi çok boyutlu dizilerle bir tam örnek verelim;

package com.mobilhanem.java.ders;

/**
 * Project: MultidimensionalArray
 *
 * @author ErenBasaran
 *         Created on 17/07/2017
 */
public class MultidimensionalArray {

    public static void main(String[] args) {

        for(int row = 0; row < getBarcelonaFutbolTakimKadro().length; row++) {
            for(int column = 0; column<getBarcelonaFutbolTakimKadro()[row].length; column++) {
                System.out.print(getBarcelonaFutbolTakimKadro()[row][column] + " ");
            }
            System.out.println();
        }

    }

    private static String[][] getBarcelonaFutbolTakimKadro() {

        String[][] barcelonaKadro = {
                {"1", "Ter", "Stegen", "Kaleci"},
                {"3", "Pique", "Defans"},
                {"4", "Rakitic", "Orta Saha"},
                {"5", "Sergio", "Orta Saha"},
                {"6", "Denis", "Suarez", "Orta Saha"},
                {"7", "Arda", "Orta Saha"},
                {"8", "Iniesta", "Orta Saha"},
                {"9", "Suarez", "Forvet"},
                {"10", "Messi", "Forvet"},
                {"11", "Neymar", "Forvet"}
        };

        return barcelonaKadro;
    }
}

Bu örnekte görüleceği gibi çok boyutlu diziler içerisinde birbirinden farklı uzunlukta diziler kullanılabilmektedir.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm Temel Java Dersleri için tıklayınız..

40

Eren Başaran

Software Developer
Mobilhanem Yazarı

3 Yorum

  • Hocam merhabalar ben javaya yeni başladım sizin derslerden takip ediyorum şu satırlar hata veriyor bilginiz olsun.

    ilk iki büyük kodlamada
    private void stringArrayPrinter => private static void stringArrayPrinter
    private void intArrayPrinter => private static void intArrayPrinter

    Şeklinde düzeltilince çağırdığımız method hata vermiyor belki ben yanlış biliyorumdur. yinede söylemek istedim. 🙂

    Kolay gelsin

    • Merhaba Mert,

      Kod örnekteki gibi yazıldığında hata vermez. Fakat sen bir static main metot oluşturup içerisinden, örneklerdeki metotları çağırırsan hata alırsın. Çünkü static metot içerisinden static olmayan metotları direk çağıramazsın. Bunun için iki yöntem bulunmakta;

      1. Senin yaptığın gibi static metot içinden çağırdığın metotları da static yapmak.
      2. static metot içerisinde o static olmayan metodun bulunduğu sınıftan bir nesne oluşturup static olmayan metodu bu nesne altından çağırmak.

  • package Package1;
    
    public class Deneme36 {
    
        public static void main(String[] args)
    
        {
    
    
    
            int [] [] iki_boyutlu_dizi = new int [5][10];
    
            for (int i=0; i<iki_boyutlu_dizi.length;i++)
            {
                System.out.println("");
                for (int a=0;a<iki_boyutlu_dizi[i].length;a++)
                {
    
                   iki_boyutlu_dizi[i][a]=(int)(Math.random()*100);
    
                    System.out.printf("%3d",iki_boyutlu_dizi[i][a]);
                }
    
            }
    
    
        }
    
    }
    

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?