Site icon Mobilhanem

Temel Java Dersleri – Çok Boyutlu Diziler

Anotasyon

Java Dersleri

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
Exit mobile version