Çok boyutlu diziler içinde en yaygın kullanım alanı iki boyutlu diziler için söz konusudur.
Elimizde aşağıdaki gibi bir veri mevcut olsun:
1998 Yılı Otomobil Satışları
(Not: Tablodaki rakamlar gerçek değildir, örnek amaçlı verilmiştir.)
MARKA OCAK ŞUBAT MART
Fiat 700 600 650
Renault 900 800 700
VW 300 400 350
Opel 500 450 470
Ford 600 500 480
Bu tabloda, 1998 yılında çeşitli otomobil markaları için gerçekleştirilen ilk üç aylık satışları görüyoruz. Bu tür bir bilgiyi bilgisayara yükleyerek aşağıdaki sorulara cevap olabilecek işlemleri tablo üzerinde gerçekleştirmek isteyebiliriz:
Her marka için 3 aylık satış toplamı nedir? (Tablodaki satır toplamları)
Her ay için tüm markaların satış toplamları nelerdir? (Tabloda sütun toplamlarının hesaplanması)
Her marka için en çok satışın gerçekleştirildiği ay hangisidir? (Satırlardaki en büyük elemanların tespiti)
Her ay için en çok satışın gerçekleştirildiği marka hangisidir? (Sütunlardaki en büyük elemanların tespiti)
Tüm marka ve tüm aylar için otomobil satışları toplamı nedir? (Tablonun genel toplamının bulunması)
Tablodaki bilgileri Java dilinde, bilgisayar belleğinde iki boyutlu dizi (two dimensional array) yapısı adı verilen yapı içinde saklayabiliriz. Matematikteki matris yapılarının Java'daki doğal karşılığı da bu tip iki boyutlu dizi yapısıdır.
Yukarıdaki tablo içinde, sayısal olmayan bilgileri ve başlıkları ihmal ederek sadece satışlardan oluşan sayısal bilgiyi dikkate alırsak ve bu bilgiyi satis adlı bir tabloda saklarsak, aşağıdaki yapıyı elde ederiz:
satis
700 600 650
900 800 700
300 400 350
500 450 470
600 500 480
Java'da, 5 satır ve 3 sütundan oluşan bu tabloyu aşağıdaki şekilde tanımlayabiliriz:
int satis=new int [5,3];
Burada satis adlı iki boyutlu dizinin bir elemanına referans vermek için program içinde, şeklinde bir ifade kullanırız. Burada satis dizinin adı, i satır indisi ve j de sütun indisidir.Satis dizisinin satır indisleri 0'dan başlar ve 4'e kadar devam eder. Sütun indisleri ise, 0 ile 2 arasında değerler alır. Aşağıda, satis dizisinin bellekte Java tarafından saklanan biçimini görüyoruz:
Buna göre, satis[0,0] elemanı 700, satis[2,1] elemanı 400 ve satis[4,2] elemanı ise 480’dir.
Satis adlı iki boyutlu dizinin eleman sayısı ise 5x3=15’tir.
import java.util.Scanner;
public class CokBoyutluDizi1 {
public static void main(String[] args){
Scanner giris = new Scanner(System.in);
int[][] satisTablosu = new int[3][2];
int i, j;
/* kullanıcıdan satış tablosu
* bilgilerini alalım */
System.out.print("Satis [0,0]=");
satisTablosu[0][0] = giris.nextInt();
System.out.print("Satis [0,1]=");
satisTablosu[0][1] = giris.nextInt();
System.out.print("Satis [1,0]=");
satisTablosu[1][0] = giris.nextInt();
System.out.print("Satis [1,1]=");
satisTablosu[1][1] = giris.nextInt();
System.out.print("Satis [2,0]=");
satisTablosu[2][0] = giris.nextInt();
System.out.print("Satis [2,1]=");
satisTablosu[2][1] = giris.nextInt();
/* bellekteki satis tablosu
* elemanlarının ekrana yazdırılması */
System.out.println("Satis tablonuz");
for (i = 0; i <= 2; i++) {
for (j = 0; j <= 1; j++) {
System.out.print(satisTablosu[i][j] + " ");
}
System.out.println();
}
}
}
İlk değer ataması, iki boyutlu dizi değişebilecek olsa bile, dizi üzerinde gerçekleştirilecek tekrarlı bazı işlemler için de bir başlangıç değeri oluşturmak için gerekli olabilir. satisTablosu adlı dizinin elemanlarını kod bloku içinde ilk değer ataması yoluyla aşağıdaki gibi oluşturabiliriz:
int[][] satisTablosu = new int[][]{
{700,600,650},
{900,800,700},
{300,400,350},
{500,450,470},
{600,500,480}
};
public class CokBoyutluDizi2 {
public static void main(String[] args){
int [][]satisTablosu = new int[][]{
{700,600,650},
{900,800,700},
{300,400,350},
{500,450,470},
{600,500,480}};
int i,j;
/*bellekteki satis tablosu
* elemanlarının ekrana yazdırılması*/
System.out.println("Satis tablosu");
for(i=0; i<=4; i++){
for(j=0; j<=2; j++) {
System.out.print(satisTablosu[i][j]+" " );
}
System.out.println();
}
}
}
length fonksiyonunun kullanılması
length fonksiyonu ile iki boyutlu dizinin her bir boyutundaki eleman sayısını bulmamız mümkün.
satisTablosu adlı dizi yukardaki gibi tanımlanmışsa satisTablosu.length ifadesi 0. boyuta ait eleman sayısını yani satır sayısını (5), satisTablosu
.length ifadesiyse 1. boyuta ait eleman sayısını yani sütun sayısını (3) verecektir. Aşağıdaki Java kodu, bu fonksiyonların nasıl kullanılabileceğini gösteriyor:
public class CokBoyutluDizi3 {
public static void main(String[] args){
int [][]satisTablosu = new int[][]{
{700,600,650},
{900,800,700},
{300,400,350},
{500,450,470},
{600,500,480}
};
int i,j;
/*bellekteki satis tablosu
* elemanlarının ekrana yazdırılması*/
System.out.println("Satis tablosu");
/*
* döngülerin sınırlarını length()
* fonksiyonlarıyla belirliyoruz
* */
for(i=0; i<satisTablosu.length; i++) {
for(j=0; j<satisTablosu[0].length; j++) {
System.out.print(satisTablosu[i][j]+" " );
}
System.out.println();
}
}
}
ÖRNEK: Satış Tablosunun Satır ve Sütun Toplamlarının ve Tablodaki Elemanların Genel Toplamının Bulunması
public class CokBoyutluDizi4 {
public static void main(String[] args){
int [][]satisTablosu = new int[][]{
{700,600,650},
{900,800,700},
{300,400,350},
{500,450,470},
{600,500,480}
};
int i, j, toplamSatis, toplamOtomobilSayisi=0;
/*bellekteki satisTablosu dizisinin
* elemanlarının ekrana yazdırılması*/
System.out.println("Otomobil satislari tablosu");
for(i=0; i<satisTablosu.length; i++) {
for(j=0; j<satisTablosu[0].length; j++) {
System.out.print(satisTablosu[i][j]+" " );
}
System.out.println();
}
/*
* Her marka için 3 aylık satış toplamlarını
* yani dizinin satır toplamlarını yazdıralım
* */
for(i=0; i<=4; i++) {
toplamSatis=0;
Elimizde aşağıdaki gibi bir veri mevcut olsun:
1998 Yılı Otomobil Satışları
(Not: Tablodaki rakamlar gerçek değildir, örnek amaçlı verilmiştir.)
MARKA OCAK ŞUBAT MART
Fiat 700 600 650
Renault 900 800 700
VW 300 400 350
Opel 500 450 470
Ford 600 500 480
Bu tabloda, 1998 yılında çeşitli otomobil markaları için gerçekleştirilen ilk üç aylık satışları görüyoruz. Bu tür bir bilgiyi bilgisayara yükleyerek aşağıdaki sorulara cevap olabilecek işlemleri tablo üzerinde gerçekleştirmek isteyebiliriz:
Her marka için 3 aylık satış toplamı nedir? (Tablodaki satır toplamları)
Her ay için tüm markaların satış toplamları nelerdir? (Tabloda sütun toplamlarının hesaplanması)
Her marka için en çok satışın gerçekleştirildiği ay hangisidir? (Satırlardaki en büyük elemanların tespiti)
Her ay için en çok satışın gerçekleştirildiği marka hangisidir? (Sütunlardaki en büyük elemanların tespiti)
Tüm marka ve tüm aylar için otomobil satışları toplamı nedir? (Tablonun genel toplamının bulunması)
Tablodaki bilgileri Java dilinde, bilgisayar belleğinde iki boyutlu dizi (two dimensional array) yapısı adı verilen yapı içinde saklayabiliriz. Matematikteki matris yapılarının Java'daki doğal karşılığı da bu tip iki boyutlu dizi yapısıdır.
Yukarıdaki tablo içinde, sayısal olmayan bilgileri ve başlıkları ihmal ederek sadece satışlardan oluşan sayısal bilgiyi dikkate alırsak ve bu bilgiyi satis adlı bir tabloda saklarsak, aşağıdaki yapıyı elde ederiz:
satis
700 600 650
900 800 700
300 400 350
500 450 470
600 500 480
Java'da, 5 satır ve 3 sütundan oluşan bu tabloyu aşağıdaki şekilde tanımlayabiliriz:
int satis=new int [5,3];
Burada satis adlı iki boyutlu dizinin bir elemanına referans vermek için program içinde, şeklinde bir ifade kullanırız. Burada satis dizinin adı, i satır indisi ve j de sütun indisidir.Satis dizisinin satır indisleri 0'dan başlar ve 4'e kadar devam eder. Sütun indisleri ise, 0 ile 2 arasında değerler alır. Aşağıda, satis dizisinin bellekte Java tarafından saklanan biçimini görüyoruz:
Buna göre, satis[0,0] elemanı 700, satis[2,1] elemanı 400 ve satis[4,2] elemanı ise 480’dir.
Satis adlı iki boyutlu dizinin eleman sayısı ise 5x3=15’tir.
İki boyutlu dizinin elemanlarını okutmak
İki boyutlu dizinin elemanlarını Java programının çalıştırılması sırasında klavyeden girmek için aşağıdaki gibi bir program kullanabiliriz. Aşağıdaki örnek programda 3 satır ve 2 sütunu olan satis adlı tablonun elemanları klavyeden giriliyor ve daha sonra tablo ekrana aktarılıyor. Şimdi bu örnek programı inceleyelim:import java.util.Scanner;
public class CokBoyutluDizi1 {
public static void main(String[] args){
Scanner giris = new Scanner(System.in);
int[][] satisTablosu = new int[3][2];
int i, j;
/* kullanıcıdan satış tablosu
* bilgilerini alalım */
System.out.print("Satis [0,0]=");
satisTablosu[0][0] = giris.nextInt();
System.out.print("Satis [0,1]=");
satisTablosu[0][1] = giris.nextInt();
System.out.print("Satis [1,0]=");
satisTablosu[1][0] = giris.nextInt();
System.out.print("Satis [1,1]=");
satisTablosu[1][1] = giris.nextInt();
System.out.print("Satis [2,0]=");
satisTablosu[2][0] = giris.nextInt();
System.out.print("Satis [2,1]=");
satisTablosu[2][1] = giris.nextInt();
/* bellekteki satis tablosu
* elemanlarının ekrana yazdırılması */
System.out.println("Satis tablonuz");
for (i = 0; i <= 2; i++) {
for (j = 0; j <= 1; j++) {
System.out.print(satisTablosu[i][j] + " ");
}
System.out.println();
}
}
}
İki boyutlu dizi elemanlarına ilk değer atanması
İki boyutlu dizinin elemanları sabit olacaksa yani program her çalıştırıldığında değerleri değişmiyorsa, bu durumda iki boyutlu dizi elemanlarına programın içinde ilk değer ataması yapabilirizİlk değer ataması, iki boyutlu dizi değişebilecek olsa bile, dizi üzerinde gerçekleştirilecek tekrarlı bazı işlemler için de bir başlangıç değeri oluşturmak için gerekli olabilir. satisTablosu adlı dizinin elemanlarını kod bloku içinde ilk değer ataması yoluyla aşağıdaki gibi oluşturabiliriz:
int[][] satisTablosu = new int[][]{
{700,600,650},
{900,800,700},
{300,400,350},
{500,450,470},
{600,500,480}
};
public class CokBoyutluDizi2 {
public static void main(String[] args){
int [][]satisTablosu = new int[][]{
{700,600,650},
{900,800,700},
{300,400,350},
{500,450,470},
{600,500,480}};
int i,j;
/*bellekteki satis tablosu
* elemanlarının ekrana yazdırılması*/
System.out.println("Satis tablosu");
for(i=0; i<=4; i++){
for(j=0; j<=2; j++) {
System.out.print(satisTablosu[i][j]+" " );
}
System.out.println();
}
}
}
length fonksiyonunun kullanılması
length fonksiyonu ile iki boyutlu dizinin her bir boyutundaki eleman sayısını bulmamız mümkün.
satisTablosu adlı dizi yukardaki gibi tanımlanmışsa satisTablosu.length ifadesi 0. boyuta ait eleman sayısını yani satır sayısını (5), satisTablosu
.length ifadesiyse 1. boyuta ait eleman sayısını yani sütun sayısını (3) verecektir. Aşağıdaki Java kodu, bu fonksiyonların nasıl kullanılabileceğini gösteriyor:
public class CokBoyutluDizi3 {
public static void main(String[] args){
int [][]satisTablosu = new int[][]{
{700,600,650},
{900,800,700},
{300,400,350},
{500,450,470},
{600,500,480}
};
int i,j;
/*bellekteki satis tablosu
* elemanlarının ekrana yazdırılması*/
System.out.println("Satis tablosu");
/*
* döngülerin sınırlarını length()
* fonksiyonlarıyla belirliyoruz
* */
for(i=0; i<satisTablosu.length; i++) {
for(j=0; j<satisTablosu[0].length; j++) {
System.out.print(satisTablosu[i][j]+" " );
}
System.out.println();
}
}
}
ÖRNEK: Satış Tablosunun Satır ve Sütun Toplamlarının ve Tablodaki Elemanların Genel Toplamının Bulunması
public class CokBoyutluDizi4 {
public static void main(String[] args){
int [][]satisTablosu = new int[][]{
{700,600,650},
{900,800,700},
{300,400,350},
{500,450,470},
{600,500,480}
};
int i, j, toplamSatis, toplamOtomobilSayisi=0;
/*bellekteki satisTablosu dizisinin
* elemanlarının ekrana yazdırılması*/
System.out.println("Otomobil satislari tablosu");
for(i=0; i<satisTablosu.length; i++) {
for(j=0; j<satisTablosu[0].length; j++) {
System.out.print(satisTablosu[i][j]+" " );
}
System.out.println();
}
/*
* Her marka için 3 aylık satış toplamlarını
* yani dizinin satır toplamlarını yazdıralım
* */
for(i=0; i<=4; i++) {
toplamSatis=0;