Java'da iki boyutlu dizilerle tüm eylemler. Diziler hakkında faydalı materyaller. Diziler hakkında ana şey

  • 29.04.2019

1. Diziler nedir?

Bu, hemen hemen her programlama dilinde bulunan ve aynı türden bir grup nesneyi ortak bir ad kullanarak tanımlamanıza izin veren özel bir yapıdır.

Diyelim ki beş kedili bir hayvan barınağınız var. Her birinin adını hatırlamıyorsunuz, ancak her birinin, her bir hayvanı tanımlamanıza izin veren bir numaraya sahip bir simgesi var. Bunun beş boyutlu "mühürler" dizisi olduğunu söyleyebiliriz. Lütfen indekslemenin sıfırdan başladığını unutmayın - Java'da bu şekilde yapılır. Diziler oluşturmak mümkün olmasaydı, beş değişken tanımlamak ve onlar için çok uygun olmayan isimler icat etmek gerekirdi.

Java'da herhangi bir boyutta diziler oluşturabilirsiniz - tek boyutlu, iki boyutlu, üç boyutlu vb. En basit seçenekle başlayalım - tek boyutlu diziler.

2. Tek boyutlu diziler

Tek boyutlu diziler, aynı türdeki değişkenlerin bir listesidir. Bir dizi oluşturmak için önce gerekli türde bir dizi değişkeni bildirmeniz gerekir. Tek boyutlu bir dizi bildirmenin genel biçimi şuna benzer: Aşağıdaki şekilde:

DeğişkenAdı yazın;

nerede parametre bir çeşit taban türü olarak da adlandırılan bir dizi öğesinin türünü belirtir.

Örnek 1. Dizi bildirmeye bir örnek

Köşeli parantezler bir değişkenden önce veya sonra yerleştirilebilir. Ama daha fazla doğru seçenek değişkenin önündeki parantezlerin gösterimi dikkate alınır - bu şekilde tür ve parantezler tek bir yerdedir, bu da ilk bakışta önünüzde böyle bir tür diziniz olduğunu anlamanıza olanak tanır.

Int ayGünler; çift ​​aylık Maaşlar;

2.1. Anahtar Kelime Kullanarak Dizi Başlatma yeni

Dizi bildirildiğinde, onun için henüz bir bellek ayrılmamıştır. Bir diziye bellek ayırmak için şunu kullanın: anahtar kelime yeni, bundan sonra dizi tipi tekrar belirtilir ve boyut köşeli parantez içinde:

DeğişkenAdı = yeni tür [boyut];

Bir dizi, bir satırla bildirilebilir ve başlatılabilir:

Int değerleri = yeni int;

Örnek 2. Bir dizi bildirimi örneği

Bir dizi türü bildirme örneğini düşünün int 12 numara bu örnek... satırı çalıştırdıktan sonra int ayGünleri = yeni int 12 elemanlı bir dizi oluşturuldu. Her öğeye, belirtilen tür için varsayılan bir değer atanır. tipi için int bu sıfır. İletişime geçmek bireysel eleman dizi, dizinin adından sonra köşeli parantez içinde, öğenin dizinini ayarlayın. Böylece, değerini değiştirmek veya almak için dizinin bir elemanına başvurabiliriz.

Genel sınıf Array1 (genel static void main (String args) (int ayDays = yeni int; ayDays = 31; ayDays = 28; ayDays = 31; ayDays = 30; ayDays = 31; ayDays = 30; ayDays = 31; ayDays = 31 ; ayDays = 30; ayDays = 31; ayDays = 30; ayDays = 31; System.out.println ("B Nisan" + ayGünleri + "günler.");))

2.2. Bir başlatma bloğu kullanarak bir diziyi başlatma

Örnek 3. Tek boyutlu bir diziyi başlatma örneği

Dizideki her bir öğenin değerlerini önceden biliyorsanız, diziyi başlatmak için bir blok kullanabilirsiniz. Onun yerine yeni int, v kıvırcık parantezler dizi öğelerinin değerleri virgülle ayrılmış olarak listelenir. Dizinin boyutu, derleyici tarafından belirtilen öğelerin sayısından çıkarılır.

Genel sınıf Array2 (genel static void main (String args) (int ayDays = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); System.out.println ("B Nisan "+ ayGünleri +" günleri. ");))

2.3. Adsız dizi

Ayrıca üçüncü bir dizi bildirimi biçimi daha vardır - adsız bir dizi. İki şekilde kullanılabilir. İlk olarak - diziyi bildirdiniz ve başlattınız test sonuçları dört beden , ama sonra bir nedenden dolayı değiştirilmesi gerekiyor - üç öğe içermesi gerekiyor. Diziyi başlatmak için formu yeniden kullanamazsınız - bir derleme hatası olacaktır:

Int testScores = (1, 2, 3, 4); ... testSkorları = (4, 7, 2); // Derleme Hatası

Ancak adsız bir dizi kullanılabilir, bu da yeni dizi akılda. Adsız bir dizi yazma biçimi, ilk ikisinin karışımıdır:

TestScores = yeni int (4, 7, 2);

Adsız bir dizi için ikinci kullanım durumu, bir diziyi bir yönteme geçirmektir. Aşağıdaki örnekte, yöntem Yazdır girdi olarak bir dizi tipi kabul eder int. Bir metot çağrılırken, isimsiz bir dizi argüman olarak iletilebilir.

Örnek 4. Adsız dizi örneği

public class Array3 (public static void main (String args) (int testScores = (1, 2, 3, 4); for (int element: testScores) (System.out.print (element + "");) System.out .println (); testScores = new int (4, 7, 2); for (int öğesi: testScores) (System.out.print (eleman + "");) System.out.println (); print (yeni int (4, 6, 2, 3));) public static void print (int dizisi) ((int öğesi: dizi için) (System.out.print (element + "");)))

3. Çok boyutlu diziler

Çok boyutlu diziler, dizi dizileridir.

Çok boyutlu bir dizi değişkeni bildirirken, her ek dizini belirtmek için ayrı bir köşeli parantez satırı kullanılır. Örneğin:

Int ikiD = yeni int;

Aşağıdaki şekil görsel olarak nasıl temsil edebileceğinizi gösterir. iki boyutlu dizi 4'e 5. Sol dizin, satırı ve sağ sütunu tanımlar.

Örnek 5. İki boyutlu dizi örneği

Aşağıdaki örnek, 4x5 iki boyutlu bir dizide değerleri nasıl ayarlayabileceğinizi gösterir. Dizeler üzerinde yineleme yapmak için bir dış döngü kullanılır için, sütunlar üzerinde yineleme yapmak için - dahili. her birine sıradaki eşyaöncekinden daha büyük bir değer atanır.

Genel sınıf TwoDArray1 (genel statik geçersiz ana (String args) (int ikiD = yeni int; int i, j, k = 0; for (i = 0; i)< 4; i++) { for (j = 0; j < 5; j++) { twoD[i][j] = k++; System.out.print(twoD[i][j] + " "); } System.out.println(); } } }

3.2 Bellekte çok boyutlu bir diziyi temsil etme

Şimdi dizinin nasıl temsil edildiğini görelim. int ikiD = yeni int; bellekte.Değişken ikiD bir matrisi değil, üç elemandan oluşan bir satırı (kırmızı) gösterir. Her öğenin değeri, dört öğeli bir dizeye (mor) bir başvurudur.

Aşağıdaki resim, üç boyutlu bir dizinin nasıl depolandığını gösterir. int üçD = yeni int akılda:

Benzer şekilde, herhangi bir boyutta bir dizi bellekte saklanabilir.

Şimdiye kadar incelediğimiz iki boyutlu dizilerde, her satırdaki eleman sayısı aynıdır - çoğu zaman öyledir. Ancak bu gerekli değildir, her satır şunları içerebilir: farklı miktar elementler. Örneğin:

Örnek 6. Farklı boyutlara sahip iki boyutlu bir dizi örneği

Böyle bir diziyi uygulayan kodu görelim. Bir dizi bildirirken, yalnızca ilk boyut için öğe sayısını ayarlamanız gerekir - int dizisi = yeni int... Böylece dizideki satır sayısını belirtiyoruz, ancak her satır için bellek ayırmıyoruz. Daha sonra dizinin her satırı için ayrı bellek ayırıyoruz. Örneğin, dizini sıfır olan dize 1 boyutunda olacaktır - dizi = yeni int.

Genel sınıf TwoDArray2 (genel statik geçersiz ana (String args) (int dizi = yeni int; dizi = yeni int; dizi = yeni int; dizi = yeni int; dizi = yeni int; int i, j, k = 0; için ( ben = 0; ben< 4; i++) { for (j = 0; j < i + 1; j++) { array[i][j] = k++; System.out.print(array[i][j] + " "); } System.out.println(); } } }

3.4. Çok boyutlu bir diziyi başlatmak için blok

Örnek 7. İki boyutlu bir diziyi başlatma

Çok boyutlu diziler için, tüm öğelerin değerleri önceden biliniyorsa, bir başlatma bloğu da kullanabilirsiniz. Her bir satır, küme parantezleri içine alınır:

Genel sınıf TwoDarray3 (genel statik geçersiz ana (String args) (double arrayTwoD = ((0, 1, 2, 3)), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, 15)); için (double arrayOneD: arrayTwoD) ((çift eleman: arrayOneD) için (System.out.print (eleman + "");) System.out.println ();)))

3.4. dizi uzunluğu

Örnek 8. Bir dizinin uzunluğunu alma

Aşağıdaki örnek, bir dizinin uzunluğunun nasıl alınacağını gösterir. Bunun için değişken kullanılır. uzunluk... Tek boyutlu bir dizide her şey açıktır - uzunluğu, öğelerinin sayısıdır. Çok boyutlu bir dizinin uzunluğu, ilk boyutundaki öğelerin sayısıdır. Örneğin, dizinin uzunluğu dizi2 2'dir. Dizideki her satırın uzunluğunu da alabilirsiniz. Örneğin, dizi2.uzunluk- dizindeki öğelerin sayısını sıfır dizine sahip olarak döndürür.

Genel sınıf ArraySize (genel statik geçersiz ana (Dize argümanları) (int dizi1 = (1, 2, 3, 4); int dizi2 = ((1, 1, 1), (2, 2, 2)); System.out .println ("dizi1'in boyutu =" + dizi1.uzunluk); System.out.println ("Dizi2'nin boyutu =" + dizi2.uzunluk); System.out.println ("dizi2'nin 1 satırlık boyutu =" + dizi2 .uzunluk);))

Yürütme sonucu:

Dizi1'in boyutu = 4 Dizi2'nin boyutu = 2 Dizi2'nin 1 satırının boyutu = 3

4. Dizilerle çalışırken faydalı yöntemler

Dizilerle çalışırken yararlı olan birkaç yöntem vardır. Onları düşünelim:

4.1. Yöntem Diziler.toString ()

Yöntem, öğeleri virgülle ayırarak tek boyutlu bir dizinin dize temsilini döndürür. Diziler arasında döngü yapmak yerine içinörnek 4'te yaptığımız gibi, öğeleri konsola çıkarmak için bu yöntemi kullanabilirsiniz:

Örnek 9. Yöntemin uygulanması Diziler.toString ()

java.util.Arrays'i içe aktarın; genel sınıf ArraysToStringDemo (genel statik geçersiz ana (String args) (int dizi = (1, 4, 6, 3, 8); System.out.println (Arrays.toString (dizi));))

4.2. Yöntem Arrays.deepToString ()

Yöntem, dizeleri köşeli parantezler içine alarak çok boyutlu bir dizinin dize temsilini döndürür:

Örnek 10. Yöntemin uygulanması Arrays.deepToString ()

java.util.Arrays'i içe aktarın; genel sınıf ArraysDeepToStringDemo (genel statik geçersiz ana (Dize argümanları) (Dize dizisi = ("bir-bir", "bir-iki", "bir-üç"), ("iki-bir", "iki-iki", "iki-üç")); System.out.println (Arrays.deepToString (dizi));))

4.3. Yöntem diziler.sort ()

Yöntem diziler.sort () sayısal bir dizinin öğelerini artan düzende sıralar:

Örnek 11. Bir diziyi sıralama

java.util.Arrays'i içe aktarın; public class ArraysSort1 (public static void main (String args) (int dizi = yeni int (3, 1, 5, 6, 8); Arrays.sort (dizi); System.out.println (Arrays.toString (dizi)) ;))

4.4. Yöntem Arrays.binarySearch ()

Yöntem Arrays.binarySearch () diziyi belirli bir değer için arar ve eleman numarasını döndürür. Gerekli eleman bulunamazsa, geri döner. - (konum + 1), nerede konum- OLABİLECEK öğenin konumu. Dizi sıralanmalıdır, aksi takdirde yöntem çağrısının sonucu tanımsız olacaktır:

Örnek 12. Bir dizi elemanı bulma

java.util.Arrays'i içe aktarın; genel sınıf BinarySearch1 (genel statik geçersiz ana (Dize argümanları) (int dizi1 = (10, 20, 30, 40); int konum1 = Arrays.binarySearch (dizi1, 20); int konum2 = Arrays.binarySearch (dizi1, 25); System.out.println (poz1); System.out.println (poz2);))

Yürütme sonucu:

4.5. Yöntem Sistem.dizikopyası ()

Yöntem Sistem.dizikopyası () bir dizinin bir kısmını başka bir diziye kopyalamanıza izin verir.

Örnek 13. Bir diziyi kopyalama

Bir diziden 2,3,4 öğelerini kopyalayan bir örnek düşünün diziKaynak bir diziye diziHedef:

Java.util.Arrays'i içe aktarın; public class ArrayCopy1 (public static void main (String argümanlar) (int arraySource = (1, 2, 3, 4, 5, 6); int arrayDestination = (0, 0, 0, 0, 0, 0, 0, 0) ; System.out.println ("arraySource:" + Arrays.toString (arraySource)); System.out.println ("arrayDestination:" + Arrays.toString (arrayDestination)); System.arraycopy (arraySource, 1, arrayDestination, 2 , 3); System.out.println ("arrayDestination'dan sonra arrayCopy:" + Arrays.toString (arrayDestination));))

Yürütme sonucu:

ArraySource: arrayDestination: arrayCopy'den sonra arrayDestination:

Örnek 14. Bir diziyi kendisinden kendisine kopyalamak

Örtüşen alanlarla aynı diziye kopyalanabilir:

Java.util.Arrays'i içe aktarın; public class ArrayCopy2 (public static void main (String args) (int dizi = (1, 2, 3, 4, 5, 6, 7, 8); System.out.println (Arrays.toString (dizi)); System. arraycopy (dizi, 1, dizi, 3, 3); System.out.println (Arrays.toString (dizi));))

Yürütme sonucu:

Bir depoda bir dolap düşünün. Her birinin kendi numarası vardır ve her biri bir tür “Bagaj” nesnesi saklar. Veya tüm şarap çeşitlerinin numaralandırıldığı bir şarap listesi ve sipariş verirken sadece içeceğin numarasını söylemeniz yeterli. Veya ilk hücrenin "Andreev" öğrencisini ve sonuncusu - "Yakovlev" i içereceği bir gruptaki öğrencilerin listesi. Veya her birine bir koltuk atanan uçak yolcularının bir listesi belirli bir sayı... Java'da diziler genellikle bu tür yapılarla, yani bir dizi homojen veriyle çalışmak için kullanılır.

Dizi nedir?

Dizi, aynı türdeki öğeleri depolayan bir veri yapısıdır. Her birine bir miktar veri (bir hücrede bir veri öğesi) koyabileceğiniz bir dizi numaralı hücre olarak düşünülebilir. Belirli bir hücreye erişim, numarası aracılığıyla gerçekleştirilir. Dizideki eleman numarası da denir dizin... Java durumunda, dizi homojen, yani aynı türdeki öğeler tüm hücrelerinde depolanacaktır. Bu nedenle, bir tamsayı dizisi yalnızca tamsayılar içerir (örneğin, int türünde), bir dizi dizi - yalnızca dizeler, oluşturduğumuz Dog sınıfının bir dizi öğesi yalnızca Dog nesnelerini içerecektir. Yani, Java'da bir dizinin ilk hücresine bir tamsayı, ikincisine bir Dize ve üçüncüsüne bir "köpek" koyamayız.

dizi bildirimi

Bir diziyi nasıl bildiririm?

Herhangi bir değişken gibi, Java'da bir dizi bildirilmelidir. Bu iki yoldan biriyle yapılabilir. Eşittirler, ancak ilki Java stiline daha uygundur. İkincisi, C dilinin mirasıdır (birçok C programcısı Java'ya geçmiştir ve kolaylıkları için, alternatif yol). Tablo, Java'da bir dizi bildirmenin her iki yolunu da gösterir: Her iki durumda da dataType, dizideki değişkenlerin türüdür. Örneklerde iki dizi bildirdik. Biri int türündeki tamsayıları, diğeri ise Object türündeki nesneleri depolar. Bu nedenle, bir dizi bildirirken bir adı ve türü vardır (tür dizi değişkenleri). ArrayName, dizinin adıdır.

dizi oluşturma

Nasıl bir dizi oluştururum?

Diğer herhangi bir nesne gibi, bir Java dizisi oluşturabilirsiniz, yani new operatörünü kullanarak onun için bellekte bir yer ayırabilirsiniz. Şu şekilde yapılır: new typeOfArray [uzunluk]; Burada typeOfArray, dizinin türü ve uzunluk, tamsayılar (int) olarak ifade edilen uzunluğudur (yani hücre sayısı). Ancak burada sadece dizi için bellek ayırdık, ancak oluşturulan diziyi önceden bildirilen herhangi bir değişkene bağlamadık. Genellikle bir dizi önce bildirilir ve ardından oluşturulur, örneğin: int myArray; // dizi bildirimi myArray = yeni int [10]; // int türünde 10 elemanlı bir dizi için bellek ayırma oluşturun Burada myArray adında bir tamsayı dizisi tanımladık ve sonra bunun 10 hücreden oluştuğunu söyledik (her biri bir tür tamsayı depolayacaktır). Ancak, çok daha sık olarak dizi, bildirimden hemen sonra bu kestirme sözdizimi kullanılarak oluşturulur: int myArray = new int [10]; // "tek şişede" bildirim ve bellek ayırma Lütfen dikkat: Bir dizi oluşturduktan sonra yeni kullanmak, hücreleri varsayılan değerler içerir. Sayısal türler için (bizim örneğimizde olduğu gibi) 0, boolean için - false, referans türleri için - null olacaktır. Böylece, işlemin ardından int myArray = new int [10]; on tamsayıdan oluşan bir dizi elde ederiz ve programın akışında bu değişene kadar her hücreye 0 yazılır.

Java'da dizi uzunluğu

Yukarıda söylediğimiz gibi, bir dizinin uzunluğu, dizinin tasarlandığı eleman sayısıdır. Bir dizinin uzunluğu oluşturulduktan sonra değiştirilemez. Lütfen dikkat: içinde Java öğeleri diziler sıfırdan numaralandırılmıştır. Yani, 10 elemanlı bir dizimiz varsa, dizinin ilk elemanı 0, sonuncusu - 9 olacaktır. Dizinin uzunluğuna uzunluk değişkenini kullanarak erişebilirsiniz. Örnek: int myArray = yeni int [10]; // 10 elemanlı bir tamsayı dizisi oluşturun ve onu myArray olarak adlandırın Sistem. dışarı. println (myArray.uzunluk); // dizinin uzunluğunu, yani diziye koyabileceğimiz eleman sayısını konsola yazdırır Programın çıktısı: 10

Dizi başlatma ve öğelerine erişim

Java'da bir dizinin nasıl oluşturulacağı zaten açıktır. Bu işlemden sonra hiçbir şey alamıyoruz. boş dizi ve varsayılan değerlerle dolu bir dizi. Örneğin, int durumunda 0 olacaktır ve referans türünde veri içeren bir dizimiz varsa, varsayılan olarak her hücreye null yazılır. Bir dizi elemanına indeksiyle erişiriz (yani, ona bir değer yazar veya ekranda gösterir veya onunla bir tür işlem yaparız). Bir diziyi başlatmak, onu belirli verilerle doldurmaktır (varsayılan değil). Örnek: 4 mevsimlik bir dizi oluşturalım ve onu string değerleri ile dolduralım - bu mevsimlerin isimleri. Dize mevsimleri = yeni Dize [4]; / * bir dizi bildirdi ve oluşturdu. Java, 4 satırlık bir dizi için bellek ayırmıştır ve şimdi her hücre şunları içerir: boş(dize bir referans türü olduğundan) * / mevsimler [0] = "Kış"; / * ilk hücreye yani sıfır numaralı hücreye Winter dizesini yazdık. Burada dizinin sıfır elemanına erişiyoruz ve oraya belirli bir değer yazıyoruz * / mevsimler [1] = "Bahar"; // 1 numaralı hücre ile aynı işlemi yapın (saniye) mevsimler [2] = "Yaz"; // ... sayı 2 mevsim [3] = "Sonbahar"; // ve sonuncusu ile 3 numaraşimdi hepsinde dört hücre dizimiz mevsimlerin isimlerini içerir. Başlatma, başlatma ve bildirimle birlikte farklı şekilde de yapılabilir: String mevsimler = new String ("Kış", "İlkbahar", "Yaz", "Sonbahar"); Dahası, operatör yeni atlanabilir: String mevsimler = ("Kış", "İlkbahar", "Yaz", "Sonbahar");

Java'da bir diziyi nasıl görüntülerim?

Dizi öğelerini ekranda (yani konsolda), örneğin şunu kullanarak görüntüleyebilirsiniz: döngü için... Bir tane daha kısa yol Dizinin ekranda gösterilmesi” paragrafında ele alınacaktır. Şimdilik bir dizi döngü ile bir örneğe bakalım: String mevsimler = new String ("Kış", "İlkbahar", "Yaz", "Sonbahar"); for (int i = 0; ben< 4 ; i++ ) { System. out. println (seasons[ i] ) ; } Sonuç olarak, program aşağıdaki sonucu yazdıracaktır: Kış, sonbahar, yaz, ilkbahar

Tek boyutlu ve çok boyutlu Java dizileri

Ama ya bir sayı dizisi, bir dizi dizi ya da bazı nesnelerden oluşan bir dizi değil, bir dizi dizi yaratmak istiyorsak? Java bunu yapmanıza izin verir. Bize zaten aşina olduğumuz dizi, int myArray = new int, sözde tek boyutlu dizidir. Ve bir dizi dizisine iki boyutlu denir. Satır numarası ve sütun numarası olan bir tablo gibidir. Veya lineer cebirin başlangıçlarını matriste öğrendiyseniz. Bu tür diziler ne için? Özellikle, aynı matrisleri ve tabloları ve ayrıca yapı olarak onlara benzeyen nesneleri programlamak için. Örneğin, bir satranç oyun alanı 8x8 dizi olarak belirtilebilir. Çok boyutlu bir dizi şu şekilde bildirilir ve oluşturulur: Int myTwoDimentionalArray = new int [8] [8]; Bu dizinin tam olarak 64 öğesi vardır: myTwoDimentionalArray, myTwoDimentionalArray, myTwoDimentionalArray, myTwoDimentionalArray ve myTwoDimentionalArray'e kadar böyle devam eder. Yani onunla bir satranç tahtasını temsil edersek, A1 myTwoDimentionalArray ve E2 myTwoDimentionalArray olacaktır. İki olan yerde üç vardır. Java'da bir dizi dizi belirtebilirsiniz ... bir dizi dizi dizisi vb. Doğru, üç boyutlu ve daha fazla diziler çok nadiren kullanılır. Ancak, üç boyutlu bir dizi kullanarak, örneğin bir Rubik küpünü programlayabilirsiniz.

Dizilerle Çalışmak İçin Yararlı Yöntemler

Java'da dizilerle çalışmak için java.util.Arrays sınıfı vardır (İngilizce diziler "diziler" anlamına gelir). Genel olarak, aşağıdaki işlemler genellikle dizilerle gerçekleştirilir: öğelerle doldurma (başlatma), bir öğeyi alma (numaraya göre), sıralama ve arama. Dizileri aramak ve sıralamak ayrı bir konudur. Bir yandan, birkaç arama ve sıralama algoritmasını kendiniz uygulamak ve yazmak çok faydalıdır. Öte yandan, herkes daha iyi yollar Java kitaplıklarına zaten yazılmış ve dahil edilmiştir ve yasal olarak kullanılabilir.

Aranacak ve sıralanacak makaleler:

Bir CS50 kursunda sıralama ve arama:

İşte üç faydalı yöntemler bu sınıf

Bir diziyi sıralama

void sort (int myArray, int fromIndex, int toIndex) yöntemi, bir tamsayı dizisini veya onun alt dizisini artan düzende sıralar.

Gerekli eleman için bir dizi arama

int ikiliSearch (int myArray, int fromIndex, int toIndex, int anahtarı). Bu yöntem, anahtar bir öğe arar zaten sıralanmış dizi myArray veya fromIndex'ten toIndex'e bir alt dizi. Hiçbir öğe bulunamazsa, öğe numarasını veya Dizin-1'den döndürür.

Diziyi dizeye dönüştür

String toString (int myArray) yöntemi, bir diziyi bir dizgeye dönüştürür. Buradaki nokta, Java dizilerinde toString () öğesini geçersiz kılmamasıdır. Bu, tüm diziyi (“” paragrafındaki gibi öğelere göre değil) doğrudan ekrana (System.out.println (myArray)) yazdırmaya çalışırsanız, sınıf adını ve onaltılık karma kodunu alacağınız anlamına gelir. dizinin (bu, Object.toString () tarafından tanımlanır). Yeni başlayan biriyseniz, toString yönteminin açıklamasını anlamayabilirsiniz. İlk aşamada bu gerekli değildir, ancak bu yöntem yardımıyla dizinin çıktısı basitleştirilir. Java, döngü kullanmadan bir diziyi ekrana görüntülemeyi kolaylaştırır. Bu, aşağıdaki örnekte tartışılmaktadır.

sort, binarySearch ve toString ile ilgili örnek

Bir tamsayı dizisi oluşturalım, onu toString kullanarak gösterelim, sıralama yöntemini kullanarak sıralayalım ve içinde bir sayı bulalım. sınıf Main (genel statik geçersiz ana (String argümanlar) (int dizi = (1, 5, 4, 3, 7); // diziyi bildir ve başlat Sistem. dışarı. println (dizi); // dizimizi toString yöntemi olmadan ekranda görüntülemeye çalışıyoruz - onaltılık bir sayı alıyoruz// diziyi "doğru" yazdır diziler. sırala (dizi, 0, 4); // tüm diziyi sıfırdan dörde sırala Sistem. dışarı. println (Diziler. toString (dizi)); // sıralanan diziyi ekranda göster int tuşu = Diziler. ikiliArama (dizi, 5); // anahtar aranıyor - sıralanmış dizide 5 numara. // binarySearch yöntemi, gerekli sayının "gizli" olduğu sıralanmış dizi öğesinin dizinini döndürür Sistem. dışarı. println (anahtar); // istenilen sayının indeksini yazdır Sistem. dışarı. println (Diziler. ikiliSearch (dizi, 0)); // ve şimdi dizide olmayan bir sayı bulmaya çalışalım, // ve sonucu hemen ekranda göster } } Programın çıktısı: 3 -1 İlk satır toString olmadan bir dizi görüntüleme girişimi, ikincisi toString kullanılarak bir dizi çıktısı, üçüncüsü sıralanmış bir dizi, dördüncüsü sıralanmış dizide istenen 5 sayısının indeksi (sıfırdan saydığımızı unutmayın) , bu nedenle dizinin dördüncü öğesinin bir dizini 3) vardır. Beşinci satırda -1 görüyoruz. Bir dizinin böyle bir indeksi yoktur. Çıkış, istenen öğenin (içinde bu durumda, 0) dizide değil.

Diziler hakkında ana şey

    Bir dizinin temel özellikleri şunlardır: içine yerleştirilen verinin türü, adı ve uzunluğu.
    Sonuncusu başlatma sırasında çözülür (bir dizi için bellek tahsisi), bir dizi bildirilirken ilk iki parametre belirlenir.

    Dizinin boyutu (hücre sayısı) int olarak tanımlanmalıdır.

    Bir dizinin uzunluğunu, oluşturulduktan sonra değiştiremezsiniz.

    Dizinin bir elemanına indeksi ile erişilebilir.

    Dizilerde, Java'nın başka yerlerinde olduğu gibi, öğeler sıfırdan numaralandırılır.

    Dizi oluşturma prosedüründen sonra, varsayılan değerlerle doldurulur.

    dizi Java dili C++ dizisinden önemli ölçüde farklıdır. Bununla birlikte, pratik olarak dinamik bir diziye yönelik bir işaretçi ile aynıdır.

Diziler hakkında faydalı materyaller

Diziler hakkında daha fazla bilgi edinmek ister misiniz? Aşağıdaki makalelere göz atın. Bu konuda çok ilginç ve faydalı bilgiler var.

    Diziler hakkında güzel ayrıntılı makale

    Bu makale, Array sınıfının bazı yöntemlerini açıklar.

    CodeGym'de diziler üzerine ilk ders.

Son güncelleme: 09.11.2018

Bir dizi, aynı türdeki bir dizi değeri temsil eder. Bir dizi bildirmek, tek bir değer depolayan normal bir değişken bildirmek gibidir ve bir diziyi bildirmenin iki yolu vardır:

veri_türü dizi_adı; // veri türü dizi_adı;

Örneğin, bir sayı dizisi tanımlayalım:

İç sayılar; int sayılar2;

Diziyi bildirdikten sonra, onu başlatabiliriz:

İç sayılar; sayılar = yeni int; // 4 sayı dizisi

Dizi, şu yapı kullanılarak oluşturulur: new data_type [number_of_elements], burada new, parantez içinde belirtilen öğe sayısı için bellek ayıran bir anahtar sözcüktür. Örneğin, sayılar = yeni int; - bu ifade, dört int öğesinden oluşan bir dizi oluşturur ve her öğenin varsayılan değeri 0 olacaktır.

Bir dizi bildirirken de hemen başlatabilirsiniz:

Int sayıları = yeni int; // 4 sayı dizisi int nums2 = yeni int; // 5 sayı dizisi

Bu başlatma ile dizinin tüm elemanları varsayılan bir değere sahiptir. İçin sayısal türler(char türü dahil) bu sayı 0'dır, boole türü için yanlıştır ve diğer nesneler için boştur. Örneğin, int için varsayılan 0'dır, bu nedenle yukarıdaki nums dizisi dört sıfır olacaktır.

Bununla birlikte, diziyi oluşturduğunuzda, dizi öğeleri için belirli değerler de ayarlayabilirsiniz:

// bu iki yöntem eşdeğerdir int sayılar = yeni int (1, 2, 3, 5); int sayılar2 = (1, 2, 3, 5);

Bu durumda, küme parantezindeki eleman sayısı ile hesaplandığından, dizinin boyutunun köşeli parantez içinde gösterilmediğine dikkat edilmelidir.

Bir dizi oluşturduktan sonra, dizi değişkeninin adından sonra köşeli parantez içinde verilen dizine göre herhangi bir elemanına başvurabiliriz:

Int sayıları = yeni int; // dizi elemanlarının değerlerini ayarlayın nums = 1; sayılar = 2; sayılar = 4; sayılar = 100; // System.out.println (sayılar) dizisinin üçüncü öğesinin değerini alın; // 4

Dizi elemanları 0'da indekslenir, bu durumda dizideki dördüncü elemana atıfta bulunmak için nums ifadesini kullanmamız gerekir.

Ve sadece 4 eleman için tanımlanmış bir dizimiz olduğu için, örneğin altıncı elemana başvuramayız: nums = 5; ... Bunu yapmaya çalışırsak, bir hata alırız.

dizi uzunluğu

Dizilerin sahip olduğu en önemli özellik, bir dizinin uzunluğunu yani elemanlarının sayısını döndüren length özelliğidir:

Int sayılar = (1, 2, 3, 4, 5); int uzunluk = sayı.uzunluk; // 5

Genellikle son dizin bilinmez ve son eleman dizi, bu özelliği kullanabiliriz:

Int son = sayılar;

Çok boyutlu diziler

Daha önce, aynı türden bir zincir veya bir dizi değer olarak temsil edilebilen tek boyutlu dizileri düşündük. Ancak tek boyutlu dizilerin yanı sıra çok boyutlu da olabilirler. En ünlü çok boyutlu dizi- iki boyutlu bir diziyi temsil eden bir tablo:

Int nums1 = yeni int (0, 1, 2, 3, 4, 5); int sayılar2 = ((0, 1, 2), (3, 4, 5));

Görsel olarak, her iki dizi de aşağıdaki gibi temsil edilebilir:

Tek boyutlu dizi nums1
2D nums2 dizisi

nums2 dizisi iki boyutlu olduğundan, basit masa... Şu şekilde de yaratılabilirdi: int nums2 = new int; ... Köşeli parantezlerin sayısı dizinin boyutunu gösterir. Ve parantez içindeki sayılar satır ve sütun sayıları içindir. Ayrıca indisleri kullanarak dizinin elemanlarını programda kullanabiliriz:

// ikinci satırın ilk sütununun elemanını ayarla nums2 = 44; System.out.println (sayı2);

Duyuru üç boyutlu dizişöyle görünebilir:

Int nums3 = yeni int;

pürüzlü dizi

Çok boyutlu diziler ayrıca "tırtıklı diziler" olarak da gösterilebilir. Yukarıdaki örnekte, iki boyutlu dizide 3 satır ve üç sütun vardı, bu yüzden düz bir tablo elde ettik. Ancak iki boyutlu bir dizideki her öğeye ayrı bir dizi atayabiliriz. farklı miktarlar elementler:

Int sayıları = yeni int; sayılar = yeni int; sayılar = yeni int; sayılar = yeni int;

her biri için

For döngüsünün özel bir sürümü, diziler ve koleksiyonlar gibi öğe kümeleri arasında döngü yapmak içindir. Eyleme benzer foreach döngüsü hangi diğer programlama dillerinde mevcuttur. Resmi beyanı:

(veri_türü değişken_adı: kapsayıcı) için (// eylemler)

Örneğin:

Int dizisi = yeni int (1, 2, 3, 4, 5); for (int i: dizi) (System.out.println (i);)

Bu durumda, int türündeki bir dizi veri bir kapsayıcı görevi görür. Daha sonra int tipinde bir değişken bildirilir.

Aynı şey ile yapılabilir normal sürüm için:

Int dizisi = yeni int (1, 2, 3, 4, 5); for (int i = 0; ben< array.length; i++){ System.out.println(array[i]); }

Aynı zamanda, for döngüsünün bu versiyonu şu açılardan daha esnektir: için karşılaştırma(int i: dizi). Özellikle, bu sürümde öğeleri değiştirebiliriz:

Int dizisi = yeni int (1, 2, 3, 4, 5); for (int i = 0; ben

Çok boyutlu diziler üzerinde döngü

int sayılar = yeni int ((1, 2, 3), (4, 5, 6), (7, 8, 9)); for (int i = 0; ben< nums.length; i++){ for(int j=0; j < nums[i].length; j++){ System.out.printf("%d ", nums[i][j]); } System.out.println(); }

İlk olarak, satırlar üzerinde yineleme yapmak için bir döngü oluşturulur ve ardından ilk döngü içinde, belirli bir satırın sütunları üzerinde yineleme yapmak için bir iç döngü oluşturulur. Benzer şekilde, çok sayıda boyuta sahip 3B diziler ve kümeler üzerinde yineleme yapabilirsiniz.

Tek boyutlu dizilerin nasıl oluşturulacağını öğrendik. Benzer şekilde, Java'da 2D, 3D, 4D ... oluşturabilirsiniz, başka bir deyişle, çok boyutlu diziler Java'da çok boyutlu bir dizi, aslında bir dizi dizisidir.

Bu tür dizileri kullanmanın popüler bir örneği, iki boyutlu diziler kullanılarak temsil edilen matrislerdir. Peki matris tam olarak nedir ve Java'da iki boyutlu bir dizi ile nasıl temsil edilir.

Java Baeldung'da Matrisler ve 2B Diziler

Bir matris, kesişim noktalarında elemanlarının bulunduğu satır ve sütunlardan oluşan dikdörtgen bir tablodur. Matrisin satır ve sütun sayısı matrisin boyutunu belirler.

Matris boyutunun genel görünümü m x n(m - satır sayısı, n - sütun sayısı) , aşağıdaki gibi:

Matrisin her elemanının kendi indeksi vardır, burada ilk basamak elemanın bulunduğu satır numarasını ve ikinci basamak sütun numarasını gösterir.

Belirli matrislerin örneklerine bakalım ve bunları Java kullanarak oluşturalım.

Matris A 2'ye 3 (2 satır, 3 sütun) boyutuna sahiptir. Bu boyutun iki boyutlu bir dizisini oluşturalım:

Int matrisA; matrixA = yeni int;

İki boyutlu bir tamsayı dizisi (çünkü bu durumda matris tamsayılar içerdiğinden) ve bunun için ayrılmış bellek ilan ettik. Bunun için 2 dizin kullandık: ilk dizin satırı ve boyutunu tanımlar, ikinci dizin sütunu ve boyutunu tanımlar.

İki boyutlu bir dizinin öğelerine erişmek için 2 dizin kullanmalısınız: ilki satır için, ikincisi sütun için. Tek boyutlu dizilerde olduğu gibi, indeksler de sıfırdan başlar. Bu nedenle tablodaki satır ve sütunların numaralandırılması 0'dan başlar.

MatrisA = 1; matrisA = -2; matrisA = 3; matrisA = 4; matrisA = 1; matrisA = 7;

Matrisin konsola çıktısını almak için tüm elemanları iki döngü kullanarak gözden geçirmeniz gerekir. Dizinin öğelerinden geçerken döngü sayısı, boyutuna eşittir. Bizim durumumuzda, ilk döngü satırlarla, ikincisi sütunlarla gerçekleştirilir.

(int i = 0; i için< 2; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixA[i][j] + "\t"); } System.out.println(); }

Yani, ilk önce ilk satırın tüm öğelerini "\ t" tablolama karakteriyle ayırarak görüntüler, satırı sarar ve ikinci satırın tüm öğelerini görüntüleriz.

Tamamen matris için kod A aşağıdaki gibi:

Genel sınıf Matris (genel statik boşluk ana (String args) (int matrixA; matrixA = yeni int; matrixA = 1; matrixA = -2; matrixA = 3; matrixA = 4; matrixA = 1; matrixA = 7; for (int i) = 0; ben< 2; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixA[i][j] + "\t"); } System.out.println(); } } }

matris için B kullanmak basitleştirilmiş başlatma yolu- duyuru sırasında. Tek boyutlu dizilere benzeterek.

Int matrisB = ((-9,1,0), (4,1,1), (-2,2, -1));

Dizinin her satırı bir çift kaşlı ayraç içine alınmalı ve birbirinden virgülle ayrılmalıdır.

Tamamen matris için kod B:

Genel sınıf Matrisi (genel static void main (String args) (int matrixB = ((-9,1,0), (4,1,1), (-2,2, -1)); for (int i = 0; ben< 3; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixB[i][j] + "\t"); } System.out.println(); } } }

Düşünmek bir döngüde başlatmaörnek olarak çarpım tablosunu kullanan iki boyutlu bir dizi için.

Public class Mult (public static void main (String args) (// 10'a 10'a iki boyutlu bir dizi oluştur int multipleTab = new int; // için ilk boyutta döngü (int i = 0; i)< 10; i++) { // цикл по второй размерности for (int j = 0; j < 10; j++) { //инициализация элементов массива multiplyTab[i][j] = (i+1)*(j+1); //вывод элементов массива System.out.print(multiplyTab[i][j] + "\t"); } System.out.println(); } } }

Burada, çarpım tablosunun değerleri ile elemanların başlatılması, bir döngüde konsola çıktıları ile birleştirilir.

Çok boyutlu ve asimetrik diziler.

Java'da çok boyutlu diziler benzer şekilde oluşturulur. Köşeli parantezlerin sayısı boyutu belirtir.
Sabit uzunlukta diziler oluşturma örnekleri:

Int a = yeni int; // iki boyutlu dizi int b = yeni int; // üç boyutlu dizi int c = yeni int; // dört boyutlu dizi // vb.

Ancak, başlangıçta her düzeyde boyutu belirtmek gerekli değildir, yalnızca ilk düzeyde boyutu belirtebilirsiniz.

Int a1 = yeni int; // 5 satırlı iki boyutlu dizi

Bu durumda her satırda kaç eleman olacağı bilinmemekle birlikte bu daha sonra belirlenebilir, ayrıca dizi her satırda farklı sayıda eleman içerebilir, yani asimetrik... a1 dizisi için her satırdaki eleman sayısını belirleyin

A1 = yeni int; a1 = yeni int; a1 = yeni int; a1 = yeni int; a1 = yeni int;

Sonuç olarak, ekranda görüntülendiğinde,

(int i = 0; i için

dizi şöyle görünecek:

0
0 0
0 0 0
0 0 0 0
0 0 0 0 0

Bir dizi oluşturulduğunda, öğeleri otomatik olarak sıfır olarak başlatılır, bu nedenle bu örnek sıfırları görüntüler.

Java'da çok boyutlu diziler üzerinde alıştırmalar:

  1. 5'e 6'lık bir dizi oluşturun ve onu rastgele sayılarla (0 ile 99 arasında değişen) doldurun. Üçüncü satırı konsola yazdır
  2. 3'e 3 boyutlu ve 0 ile 99 arasında rastgele sayılarla doldurulmuş C ve D matrisleri verildi. Toplama işlemini yapın, ardından matrisleri birbirleriyle ayrı ayrı çarpın. İlk matrisleri ve hesaplamaların sonucunu konsola gönderin.
  3. İki boyutlu bir dizinin tüm öğelerini toplayın.
  4. Negatif ve pozitif sayılar içeren iki boyutlu bir dizi verilir. Negatif sayılar içeren dizideki hücrelerin sayılarını görüntüleyin.
  5. İki boyutlu bir dizinin satırlarındaki öğeleri artan düzende sıralayın

"Oyun Geliştiricisi" olarak çalışmak + istihdam

Java dizileri

Dizi, aynı türdeki değerleri depolayan bir veri yapısıdır. Bir dizinin tek bir elemanına bir tamsayı indeksi kullanılarak erişilir. Örneğin, a bir tamsayı dizisiyse, a [i] ifadesinin değeri dizideki i. tamsayıya eşittir.

Bir dizi şu şekilde bildirilir: önce dizinin türü, yani dizide bulunan öğelerin türü belirtilir, ardından bir çift boş köşeli parantez ve ardından değişkenin adı belirtilir. Örneğin, bir tamsayı dizisi şu şekilde bildirilir:
int a;

Ancak, bu operatör, onu gerçek bir diziyle başlatmadan yalnızca a değişkenini bildirir. Bir dizi oluşturmak için new operatörünü kullanmanız gerekir.

Bu operatör 100 tamsayıdan oluşan bir dizi oluşturur. Bu dizinin elemanları 0'dan 99'a (1'den 100'e kadar değil) numaralandırılmıştır. Oluşturulduktan sonra dizi, örneğin bir döngü kullanılarak doldurulabilir.

int a = yeni int;
for (int i = 0; ben< 100; i++)
bir [i] = ben; // Diziyi 0'dan 99'a kadar sayılarla doldurur.

100 elemanlı bir dizi oluşturarak a öğesine (veya dizini 0 ila 99 aralığı dışında olan başka bir öğeye) erişmeye çalışırsanız, dizi dizininin aralık dışında olmasıyla ilgili bir istisna oluştuğundan program sonlandırılır. Aralık.
Bir dizideki öğelerin sayısını saymak için MassName yöntemini kullanın.
wa.uzunluk.

Örneğin,

for (int i = 0; ben< a. length; i++ System.out.println (a[i]);

Dizi oluşturulduktan sonra, onu yeniden boyutlandırmak mümkün değildir (tabii ki, tek tek öğelerini değiştirebilirsiniz). Program yürütme sırasında bir diziyi sık sık yeniden boyutlandırmanız gerekiyorsa, dizi listesi adı verilen başka bir veri yapısını kullanmak daha iyidir.

Bir dizi iki şekilde bildirilebilir:

int a;
veya
int a;

Java programcılarının çoğu ilk stili tercih eder çünkü bu, dizi tipini int (bir tamsayı dizisi) değişken adından daha açık bir şekilde ayırır.

Dizi başlatıcılar ve adsız diziler

Java dili, bir dizi oluşturma ve aynı anda başlatma olanağına sahiptir. İşte böyle bir sözdizimsel yapıya bir örnek:

int küçükPrimes = (2, 3, 5, 7, 11, 13);

Bu durumda yeni operatörü kullanmanız gerekmediğini unutmayın. Ayrıca, adsız bir dizi başlatmak bile mümkündür:

yeni int (16, 19, 23, 29, 31, 37)

Bu ifade, yeni bir dizi için bellek ayırır ve onu kaşlı ayraçlar içindeki sayılarla doldurur. Bu durumda sayıları sayılır ve buna göre dizinin boyutu belirlenir. Bu sözdizimi, yeni bir değişken oluşturmadan bir diziyi yeniden başlatmak için kullanışlıdır. Örneğin, ifade

smallPrimes = new int (17, 19, 23, 29, 31, 37);
kısa bir ifadedir
int anonim = (17, 19, 23, 29, 31, 37);
smailPrimes = anonim;

Sıfır boyutunda bir dizi oluşturabilirsiniz. Böyle bir dizi, boş olduğu ortaya çıkan bir diziyi hesaplayan bir yöntem yazarken faydalı olabilir. Sıfır uzunluklu bir dizi şu şekilde bildirilir:

yeni Öğe türü

Böyle bir dizinin boş bir nesneye eşdeğer olmadığına dikkat edin.

dizileri kopyalama

Bir dizi diğerine kopyalanabilir, ancak her iki değişken de aynı diziye atıfta bulunur.

int şanslıSayılar = smailPrimes;
şanslıSayılar = 12; // smailPrimes öğesi de artık 12'dir.

Sonuç, Şekil 2'de gösterilmektedir. 3.14. Bir dizinin tüm öğelerini diğerine kopyalamanız gerekiyorsa, System. Çağrısı şöyle görünür:

System.arraycopy (from, fromlndex, tolndex, count);

to dizisi, kopyalanan tüm öğeleri içerecek kadar büyük olmalıdır.

Pirinç. 3.14. Dizi kopyalama

Örneğin, sonuçları Şekil 2'de gösterilen aşağıda gösterilen operatörler. 3.15, iki dizi oluşturun ve ardından ilk dizinin son dört öğesini ikinciye kopyalayın. Kopyalama, kaynak dizideki ikinci konumda başlar ve kopyalanan öğeler, üçüncü konumdan başlayarak hedef diziye yerleştirilir.

int smailPrimes = (2, 3, 5, 7, 11, 13);
int şanslıSayılar = (1001, 1002, 1003, 1004, 1005, 1006, 1007);
System.aggausor (smailPrimes, 2, luckyNumbers, 3, 4);
for (int i = 0; ben< luckyNumbers.length; i++)
System.println (i +. ":" + LuckyNumbersfi]);

Bu ifadelerin yürütülmesi aşağıdaki sonuca yol açar.

0: 1001
1: 1002
2: 1003
3: 5
4: 7
5: 11
6: 13

Pirinç. 3.15. Dizi öğelerini kopyalama

Java'daki bir dizi, C ++'daki bir diziden önemli ölçüde farklıdır. Bununla birlikte, pratik olarak dinamik bir diziye yönelik bir işaretçi ile aynıdır. Bu, operatörün

int a = yeni int; // Java
operatöre eşdeğer
ben n t * = yeni ben n t [1 0 0]; // C++,
Ama değil
int a; // C++

Java'da, no ifadesi varsayılan olarak dizin değişikliklerinin aralığını kontrol eder. Ayrıca, Java dilinde işaretçi aritmetiği yoktur - dizideki bir sonraki öğeye erişmek için bir işaretçiyi artıramazsınız.