• Java'da iki boyutlu dizi nasıl oluşturulur? Java Dizisi. Java'da diziler. Yeni Başlayanlar için Java


    "Oyun Geliştiricisi" olmak için eğitim alın + istihdam

    Java dizileri

    Dizi, aynı türdeki değerleri saklayan bir veri yapısıdır. Tek bir dizi öğesine bir tamsayı indeksi kullanılarak erişilir. Örneğin, a bir tamsayılar dizisiyse, o zaman a[i] ifadesinin değeri dizideki i'inci 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 gelir ve ardından değişkenin adı gösterilir. Örneğin, tamsayılardan oluşan bir diziyi şu şekilde bildirebilirsiniz:
    int a;

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

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

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

    100 öğeden oluşan bir dizi oluşturarak a öğesine (veya dizini 0 ila 99 aralığının dışında olan herhangi bir öğeye) erişmeye çalışırsanız, dizi dizini sınırların dışında istisna atılacağı için program sonlandırılacaktır.
    Bir dizideki öğelerin sayısını saymak için nameArray- yöntemini kullanın.
    va.uzunluğu.

    Örneğin,

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

    Bir dizi oluşturulduktan sonra boyutunu değiştirmek imkansızdır (ancak elbette tek tek öğelerini değiştirebilirsiniz). Programın yürütülmesi sırasında bir dizinin boyutunu sık sık değiştirmeniz 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;

    Çoğu Java programcısı ilk stili tercih eder çünkü bu, int dizi türünü değişken adından daha net bir şekilde ayırır.

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

    Java'nın aynı anda bir dizi oluşturma ve onu başlatma olanağı vardır. İşte böyle bir sözdizimsel yapıya bir örnek:

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

    Bu durumda new operatörünü kullanmaya gerek olmadığını unutmayın. Ek olarak, adsız bir diziyi bile başlatabilirsiniz:

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

    Bu ifade, yeni bir dizi için bellek ayırır ve onu süslü parantez içinde belirtilen sayılarla doldurur. Bu durumda sayıları hesaplanır ve buna göre dizinin boyutu belirlenir. Bu sözdizimsel yapının, yeni bir değişken oluşturmadan bir diziyi yeniden başlatmak için kullanılması uygundur. Örneğin, ifade

    küçükPrimes = new int( 17, 19, 23, 29, 31, 37 );
    kısaltılmış bir ifadedir
    int anonim = ( 17, 19, 23, 29, 31, 37 );
    smailPrimes = anonim;

    Sıfır boyutlu bir dizi oluşturabilirsiniz. Böyle bir dizi, boş olduğu ortaya çıkan bir diziyi değerlendiren bir yöntem yazarken yararlı olabilir. Sıfır uzunluklu bir dizi aşağıdaki gibi bildirilir:

    yeni eleman türü

    Böyle bir dizinin boş bir nesneye eşdeğer olmadığını unutmayın.

    Dizileri kopyalama

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

    int luckyNumbers = smailPrimes;
    şanslıNimberlar = 12; // Artık smailPrimes elemanı da 12'dir.

    Sonuç Şekil 2'de gösterilmektedir. 3.14. Bir dizinin tüm elemanlarını diğerine kopyalamanız gerekiyorsa System sınıfından arraycopy yöntemini kullanmalısınız. Çağrısı şuna benziyor:

    System.arraycopy(ildenden, dizinden, tolndex'e, sayım);

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

    Pirinç. 3.14. Bir diziyi kopyalama

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

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

    Bu ifadelerin yürütülmesi aşağıdaki sonucu üretir.

    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. Ancak pratik olarak dinamik dizi işaretçisiyle aynıdır. Bu, operatörün

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

    Java'da varsayılan no operatörü indeks aralığını kontrol eder. Ayrıca Java'da işaretçi aritmetiği yoktur; bir dizinin sonraki öğesine erişmek için işaretçiyi artıramazsınız.

  • Java,
  • Algoritmalar
    • öğretici

    İlk mülakata hazırlananlardan çok azının, (ön)kıdemsiz programcı olarak ilk işlerine başvururken bu soruya olumsuz cevap vereceğini düşünüyorum. Ya da en azından olumlu cevaptan şüphe edin. Elbette, doğrudan indeks erişimine sahip bu kadar basit bir veri yapısı - hile yok! Hayır, JavaScript veya PHP gibi bazı dillerde diziler elbette çok ilginç bir şekilde uygulanır ve aslında bir diziden çok daha fazlasıdır. Ancak bahsettiğimiz şey bu değil, dizilerin "sağlam hafıza alanı" biçimindeki "geleneksel" uygulanmasından bahsediyoruz. Bu durumda indekslere ve bir elemanın büyüklüğüne göre adres basitçe hesaplanır ve karşılık gelen değere erişilir. Bunda bu kadar zor olan ne?
    Hadi çözelim. Örneğin, Java'da. Şüphelenmeyen bir başvuru sahibinden bir tamsayı dizisi oluşturmasını istemek N X N. Kişi kendinden emin bir şekilde şöyle bir şey yazıyor:
    int g = yeni int[n][n];
    Harika. Şimdi sizden dizi elemanlarını bir şeyle başlatmanızı istiyoruz. En azından birimler halinde, en azından endekslerin toplamı olarak. Şunu elde ederiz:
    for(int i = 0; i< n; i++) { for(int j = 0; j < n; j++) { g[i][j] = i + j; } }
    Hatta daha sık yazıyorlar
    for(int i = 0; i< g.length; i++) { for(int j = 0; j < g[i].length; j++) { g[i][j] = i + j; } }
    bu da bir sohbet sebebi ama şimdi başka bir şeyden bahsediyoruz. Bir kişinin ne bildiğini öğrenmeye, nasıl düşündüğünü görmeye çalışıyoruz. Bu nedenle değerlerin simetrik olarak konumlandığına dikkat çekiyor ve döngü yinelemelerinden tasarruf etmesini istiyoruz. Tabii sadece alt üçgenden geçebilecekken neden tüm indeks değerleri üzerinden geçesiniz ki? Konu genellikle kolayca kabul eder ve ana köşegeni akıllıca vurgulayarak, dikkatlice şöyle bir şey yazar:
    for(int i = 0; i< n; i++) { g[i][i] = 2* i; for(int j = 0; j < i; j++) { g[j][i] = g[i][j] = i + j; } }
    g[i][i] = 2* i yerine; sıklıkla yazılır g[i][i] = i + i; veya g[i][i] = i<< 1; и это тоже повод поговорить. Но мы идем дальше и задаем ключевой вопрос: Program ne kadar hızlı çalışacak?. Genel mantık şu şekildedir: neredeyse 2 kat daha az endeks hesaplaması; neredeyse 2 kat daha az değer hesaplaması (toplama); aynı sayıda görev. Bu da yüzde 30 daha hızlı anlamına geliyor. Bir kişinin iyi bir matematik geçmişi varsa, kaydedilen işlemlerin tam sayısını ve optimizasyonun etkinliğine ilişkin daha mantıklı bir değerlendirmeyi bile görebilirsiniz.
    Şimdi asıl darbenin zamanı geldi. Kodun her iki versiyonunu da yeterince büyük bir değer üzerinde çalıştırıyoruz N(yaklaşık birkaç bin), örneğin bunun gibi.

    Zaman kontrollü kod

    sınıf A ( public static void main(String args) ( int n = 8000; int g = new int[n][n]; long st, en; // one st = System.nanoTime(); for(int i = 0;ben< n; i++) { for(int j = 0; j < n; j++) { g[i][j] = i + j; } } en = System.nanoTime(); System.out.println("\nOne time " + (en - st)/1000000.d + " msc"); // two st = System.nanoTime(); for(int i = 0; i < n; i++) { g[i][i] = i + i; for(int j = 0; j < i; j++) { g[j][i] = g[i][j] = i + j; } } en = System.nanoTime(); System.out.println("\nTwo time " + (en - st)/1000000.d + " msc"); } }


    Ne görüyoruz? Optimize edilmiş sürüm 10-100 kat daha yavaş çalışır! Şimdi adayın pozisyona tepkisini gözlemlemenin zamanı geldi. Alışılmadık (daha kesin olarak geliştiricinin uygulamasında olağan) stresli bir duruma tepki ne olacak? Sanığın yüzü heyecan gösteriyorsa ve geçici olarak varlığınızı unutarak düğmelere basmaya başlıyorsa, bu iyi bir işarettir. Bir ölçüde. Projenin sonucunu umursamayan bir araştırmacıyı işe almak istemezsiniz, değil mi? O halde ona "Neden?" sorusunu sormayın. Onlardan ikinci seçeneği, birincisinden daha hızlı çalışacak şekilde yeniden düzenlemelerini isteyin.
    Artık bir süreliğine işinize güvenle devam edebilirsiniz. Yarım saat içinde başvuru sahibinin temel kişisel ve mesleki niteliklerini değerlendirmek için yeterli materyale sahip olacaksınız.
    Bu arada, çalışma web sitemde bu sorunu kısaca anlattığımda en popüler yorum "Bu sizin Java eğrinizdir" oldu. Kodu Great and Free'de özellikle onlar için yayınlıyorum. Windows için Free Pascal'ın mutlu sahipleri de göz atabilir

    spoiler altında

    program Süresi; Windows'u kullanır; var başlangıç, bitiş, res: int64; n, i, j: Tamsayı; g: Tamsayı Dizisi Dizisi; başlangıç ​​n:= 10000; SetLength(g, n, n); QueryPerformanceFrequency(res); QueryPerformanceCounter(başlat); i:=1'den n-1'e kadar do j:=1'den n-1'e kadar do g := i + j; QueryPerformanceCounter(son); writeln("Satırlara göre zaman:", (bitiş - başlangıç) / res, " sn"); QueryPerformanceCounter(başlat); i:=1'den n-1'e kadar do j:=1'den n-1'e kadar do g := i + j; QueryPerformanceCounter(son); writeln("Sütuna göre zaman:", (bitiş - başlangıç) / res, " sn"); son.


    Pascal'daki yukarıdaki kodda "kafa karıştırıcı" yönleri kaldırdım ve yalnızca sorunun özünü bıraktım. Eğer buna sorun denilebilirse.
    Sanığa hangi soruları soracağız?
    1. Neden daha yavaş çalışıyor? Ve daha detaylı olarak...
    2. Başlatma işlemini nasıl daha hızlı hale getirebilirim?

    Java uygulamasının daha derinlerine inmeye ihtiyaç varsa, başvuru sahibinden küçük değerler için yürütme süresini gözlemlemesini isteriz. N. Örneğin, ideone.com'da n=117 için "optimize edilmiş" seçeneği yarısı kadar yavaştır. Ancak bir sonraki değer olan n=118 için optimize edilmemiş olandan 100 (yüz) kat daha hızlı olduğu ortaya çıkıyor! Yerel bir makinede deneme yapmanızı önerin. Ayarlarla oynamasına izin verin.
    Bu arada, herkes neler olduğunu anlıyor mu?

    Birkaç kelime gerekçe

    Bu işe alım görüşme yöntemini haklı çıkarmak için birkaç kelime söylemek istiyorum. Evet, dil sözdizimi bilgisini ve veri yapıları bilgisini test etmiyorum. Belki uygar bir iş piyasasında bunların hepsi işe yarar. Ancak kalifiye personel sıkıntısının olduğu koşullarımızda, başvuru sahibinin karşı karşıya kalacağı iş için daha ziyade uzun vadeli yeterliliğini değerlendirmemiz gerekiyor. Onlar. öğrenme, üstesinden gelme, anlama, yapma yeteneği.
    Bu, antik Roma'daki lejyonerleri işe almak için yapılan "mülakat" ruhuna benzer. Geleceğin savaşçısı çok korkmuştu ve kızarıp solmadığını görmek için izledi. Soluklaşırsa, stresli bir durumda başvuranın kafasından kan akıyor ve pasif bir reaksiyona eğilimli oluyor. Örneğin bayılma. Başvuran kızarırsa, kan kafasına hücum etti. Onlar. aktif eylemlere ve kavgalara girme eğilimindedir. Bu uygun görüldü.
    Son bir şey daha var. Röportajlarda kullanmaya devam etmek yerine neden bu görevi herkese anlattım? Sadece potansiyel başvuru sahipleri bu görevi zaten "öğrenmişler" ve başkalarını kullanmak zorundalar.
    Aslında bu etkiye tam olarak görüntü işlemenin gerçek göreviyle bağlantılı olarak dikkat ettim. Durum biraz kafa karıştırıcıydı ve yeniden düzenleme sonrasında fps'min neden bu kadar düştüğünü hemen anlamadım. Genel olarak, herkesin muhtemelen bu kadar harika anları vardır.

    Şimdiye kadar önde gelen sürüm, işlemci önbelleğinin suçlu olduğu yönünde. Onlar. İlk seçenekteki sıralı erişim, belirli bir sınırın ötesine geçildiğinde güncellenen bir karma dahilinde çalışır. Sütunlara göre erişildiğinde hash sürekli olarak güncellenmek zorunda kalır ve bu çok zaman alır. Bu versiyona en saf haliyle göz atalım. Bir dizi oluşturalım ve hangisinin daha hızlı olduğunu karşılaştıralım; bir satırdaki tüm öğeleri işlemek mi, yoksa dizi öğelerini rastgele bir sayıyla aynı sayıda işlemek mi? Bu programın adresi ideone.com/tMaR2S'dir. 100.000 dizi öğesi için rastgele erişim genellikle fark edilir derecede daha hızlıdır. Bu ne anlama gelir?
    Burada bana (Big_Lebowski) haklı olarak döngülerin yeniden düzenlenmesinin sonuçları sıralı seçenek lehine değiştirdiği belirtildi. Deneyin saflığı için bir ısınma döngüsü ayarlamam gerekiyordu. Aynı zamanda Leventov'un önerdiği gibi ortalama çalışma süresini elde etmek için birkaç tekrar yaptım. Bu ideone.com/yN1H4g gibi çıktı. Onlar. Büyük bir dizinin öğelerine rastgele erişim, sıralı erişimden ~%10 daha yavaştır. Belki de önbellek aslında bir rol oynayabilir. Ancak orijinal durumda performans önemli ölçüde düştü. Yani başka bir şey daha var.

    Yavaş yavaş, dizinin bir satırından diğerine geçerken ek eylemlerle ilgili versiyon lider oluyor. Ve bu doğru. Orada tam olarak ne olduğunu anlamaya devam ediyor.

    Etiketler:

    • Programlama
    • diziler
    • hafıza
    Etiket ekle

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

    Bu tür dizilerin kullanımının popüler bir örneği, temsili için iki boyutlu dizilerin kullanıldığı matrislerdir. Peki, matris nedir ve Java'da iki boyutlu bir dizi kullanılarak nasıl temsil edilir?

    Java'da matrisler ve iki boyutlu diziler

    Matris, elemanlarının bulunduğu kesişme noktasındaki satır ve sütunlardan oluşan dikdörtgen bir tablodur. Bir 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 rakam, elemanın bulunduğu satır numarasını, ikinci rakam ise sütun numarasını gösterir.

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

    Matris A 2'ye 3 boyutundadır (2 satır, 3 sütun). Bu boyutta iki boyutlu bir dizi oluşturalım:

    Int matrisA; matrisA = yeni int;

    İki boyutlu bir tamsayı dizisi bildirdik (çünkü bu durumda matris tamsayılar içeriyor) ve bunun için bellek ayırdık. Bunu yapmak için 2 indeks kullandık: ilk indeks satırı ve boyutunu tanımlar, ikinci indeks ise sütunu ve boyutunu tanımlar.

    İki boyutlu bir dizinin öğelerine erişmek için 2 dizin kullanmanız gerekir: birincisi 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ütun numaralandırması 0'dan başlar.

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

    Matrisin konsolda görüntülenmesi için iki döngü kullanarak tüm öğelerin üzerinden geçmeniz gerekir. Dizinin elemanlarından geçerken döngü sayısı boyutuna eşittir. Bizim durumumuzda, ilk döngü satırlar boyunca, ikincisi sütunlar boyunca gerçekleştirilir.

    İçin (int i = 0; i< 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 elemanlarını "\t" sekme karakteriyle ayırarak çıktısını alıyoruz, satırı kesiyoruz ve ikinci satırın tüm elemanlarının çıktısını alıyoruz.

    Matrisin tam kodu A aşağıdaki gibi:

    Genel sınıf Matrix ( public static void main(String args) ( int matrisA; matrisA = yeni int; matrisA = 1; matrisA = -2; matrisA = 3; matrisA = 4; matrisA = 1; matrisA = 7; for (int i = 0;i< 2; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrixA[i][j] + "\t"); } System.out.println(); } } }

    Matris için B hadi yararlanalım basitleştirilmiş başlatma yöntemi- duyuru sırasında. Tek boyutlu dizilere benzetilerek.

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

    Dizideki her satır bir çift süslü parantez içine alınmalı ve virgülle ayrılmalıdır.

    Matrisin tam kodu B:

    Genel sınıf Matrix ( public static void main(String args) ( int matrisB = ( (-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(); } } }

    Hadi düşünelim döngüde başlatmaÖrnek olarak çarpım tablosunu kullanarak iki boyutlu bir dizi için.

    Public class Mult ( public static void main(String args) ( // 10'a 10'luk iki boyutlu bir dizi oluşturun int çarpın Tab = new int; // ilk boyutta döngü for (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, elemanların çarpım tablosunun değerleriyle başlatılması, konsola çıktıları ile bir döngüde birleştirilir.

    Çok boyutlu ve asimetrik diziler.

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

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

    Ancak başlangıçta boyutu tüm düzeylerde belirtmenize gerek yoktur; boyutu yalnızca ilk düzeyde belirtebilirsiniz.

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

    Bu durumda her satırda kaç eleman olacağı henüz bilinmiyor, bu daha sonra belirlenebilir ve dizi her satırda farklı sayıda eleman içerebilir yani asimetrik. a1 dizisi için her satırdaki eleman sayısını belirleyelim

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

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

    For(int i = 0; i

    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, elemanları otomatik olarak sıfıra atanır, dolayısıyla bu örnekte sıfırlar görüntülenir.

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

    1. 5'e 6'lık bir dizi oluşturun ve onu rastgele sayılarla (0'dan 99'a kadar) doldurun. Üçüncü satırı konsola yazdırın
    2. Verilenler, boyutları 3'e 3 olan ve 0'dan 99'a kadar rastgele sayılarla doldurulmuş C ve D matrisleridir. Toplama işlemini ayrı ayrı yapın, ardından matrisleri birbirleriyle çarpın. Kaynak matrisleri ve hesaplama sonuçlarını konsola aktarın.
    3. İki boyutlu bir dizinin tüm elemanlarını toplayın.
    4. Negatif ve pozitif sayıları içeren iki boyutlu bir dizi verilmiştir. Negatif sayılar içeren dizi hücrelerinin sayılarını görüntüleyin.
    5. İki boyutlu bir dizinin satırlarındaki öğeleri artan düzende sıralayın

    Dizi nedir?

    Java'daki bir dizi, indeks tarafından erişilebilen aynı türdeki öğelerin bir koleksiyonudur.

    Java'daki dizi elemanları bilgisayarın belleğinde birbiri ardına bulunur. Aşağıda Java'daki bir dizi örneği verilmiştir.

    Java'da Dizi Bildirmek

    int tipindeki elemanları saklayacak bir dizi tanımlayalım:

    Burada bir dizi olan arr değişkeni bildirilir. Bu değişkeni kullanmak için onu tanımlamanız gerekir.

    Java'da Dizi Tanımı

    Java'da bir dizi tanımlamak için uzunluğunu belirtmeniz gerekir; içinde saklanabilecek öğe sayısı:

    Dizimiz 5 elementi saklayacak.

    Bir dizi, öğelerin bir koleksiyonudur. Dizinin her elemanına numarasıyla başvurulabilir. Sayıya genellikle indeks denir. Java'da dizi elemanlarının numaralandırılması sıfırdan başlar.

    Bir diziye öğeler nasıl yüklenir?

    Dizinin ilk elemanına bir değer atayalım ve ilk elemanın indeksi sıfır olsun:

    Dizinin ikinci elemanına bir değer atayalım ve ikinci elemanın birinci indeksi var:

    for(int Han = 0; Han< 5; inn++)
    {
    varış = han;
    }

    Bir dizi bildirirken, değerleri hemen içine yükleyebilirsiniz:

    int arr = (0, 1, 2, 3, 4);

    buradaki element sayısı 5'tir, yani. Eleman sayısını belirtmenize gerek yoktur, otomatik olarak belirlenecektir.

    Bir diziden öğeler nasıl alınır?

    Dizinin her elemanına numarasıyla başvurulabilir. Bir dizi öğesi elde etmek için dizi adını ve öğe dizinini belirtmeniz gerekir:

    Bu dizinin ilk elemanıdır çünkü ilk elemanın indeksi sıfırdır.

    Dizinin üçüncü elemanının değerini int a değişkenine atayalım:

    Dizinin tüm elemanlarını bir döngüde çıkaralım (dizi üzerinde yineleyeceğiz):

    For(int Han = 0; Han< 5; inn++) { System.out.println("arr[" + inn + "] = " + arr); }

    Bir dizinin çıktısını almak için kullanılan döngünün basitleştirilmiş bir versiyonu aşağıdaki gibidir:

    For(int inn: arr) ( System.out.println("arr[" + inn + "] = " + arr); )

    Java'da bir dizi nasıl silinir?

    Java'da bir diziyi şu şekilde silebilirsiniz:

    Java'da bir dizinin uzunluğu nasıl alınır?

    Java'da bir dizinin uzunluğunu şu şekilde elde ederiz:

    int arrLength = arr.uzunluk;

    Java'da bir dizinin ilk elemanı nasıl elde edilir?

    int ilkElem = arr;

    Java'da bir dizinin yarı son elemanı nasıl elde edilir?

    int lastElem = arr;

    Java'da değişken uzunluklu bir dizi nasıl tanımlanır?

    Java'da değişken uzunluklu bir dizi nasıl tanımlanır? Mümkün değil. Bir diziyi tanımladığınızda uzunluğunu ayarlarsınız; daha sonra değiştirilemez. Bu gibi durumlarda koleksiyonlar kullanılır, örneğin: Vector, ArrayList, vb.

    Bu nedenle dizi uzunluğu değişken olamaz. Ancak bir diziyi tanımlarken bir değişken kullanabilirsiniz. Öyleyse:

    int cd'si;
    int ab = yeni int;//Hata.

    sonra bir hata alıyoruz: dizinin uzunluğu değişken olamaz.

    CD değerini ayarlamanız gerekir:

    intcd = 10;
    int ab = yeni int;

    Şimdi tamam. Diziyi tanımladıktan sonra cd değişkenini değiştirirseniz bu durum diziyi etkilemez, yani. uzunluğu değişmeyecektir. Örnek:

    Dahili cd = 10; int ab = yeni int; cd = 12;// Bu mümkündür arrLength = ab.length; System.out.println("ab dizi uzunluğu = " + arrLength); //Çıktılar: ab dizi uzunluğu = 10 ab=4;// Ve işte hata

    Bir hata alıyoruz:

    "Main" iş parçacığında istisna Java.lang.ArrayIndexOutOfBoundsException: 11

    Dizimizin maksimum indeksi 9'dur. Cd değişkeninin değerinin değiştirilmesi diziyi etkilemez çünkü dizi zaten tanımlıdır ve uzunluğu sabittir.

    Dizi elemanlarına erişmek için değişkenler kullanılabilir:

    Int var = 1;
    int öğe = arr;
    var = 2;
    öğe = dizi;

    Java'daki karakter dizisi

    Java'daki bir karakter dizisi örneği ve çıktısı:

    Char charArr = ("S", "B", "P"); for(int Han = 0; Han< charArr.length; inn++) { System.out.println("charArr[" + inn + "] = " + charArr); }

    Java'da bir dizi nasıl doldurulur?

    Statik doldurma yöntemini kullanarak bir diziyi doldurabilirsiniz.

    Dizi, ortak bir isimle anılan aynı türdeki değişkenlerin koleksiyonudur. Diziler herhangi bir türdeki öğelerden oluşturulabilir ve bir veya daha fazla boyuta sahip olabilirler. Bir dizideki belirli bir öğeye indeksi (sayı) aracılığıyla erişilir. Bu notta tek boyutlu ve iki boyutlu dizilerin işlenmesine bakacağız.

    Java'da tek boyutlu diziler

    Tek boyutlu bir dizi aslında aynı türdeki değişkenlerin bir listesidir. Bir dizi oluşturmak için öncelikle istediğiniz türde bir dizi değişkeni oluşturmanız gerekir. Tek boyutlu bir diziyi bildirmenin genel formatı şöyledir:
    var-adı yazın;
    Burada type, dizinin temel türünü bildirir; var-name dizi değişkeninin adıdır. Temel tür, her dizi öğesinin veri türünü belirler. Örneğin, ay_günler adlı int bileşenlerinden oluşan tek boyutlu bir dizinin bildirimi şöyle görünür:
    int ay_günleri;
    Bu bildirim, Month_days'ın bir dizi değişkeni olduğu gerçeğini ortaya koysa da gerçekte hiçbir dizi mevcut değildir. Aslında, Month_days değeri olmayan bir diziyi temsil eden null (boş işaretçi) olarak ayarlanmıştır. Month_days'i gerçek, fiziksel bir tamsayı dizisiyle ilişkilendirmek için, yeni işlemi kullanarak ona bellek ayırmanız ve onu Month_days dizisine atamanız gerekir; new, hafızayı ayıran özel bir işlemdir.

    Tek boyutlu dizilere uygulanan genel new formatı şöyledir:
    dizi-var = yeni tür;
    Burada type, dağıtılan verinin türüdür, size dizideki öğelerin sayısıdır, array-var ise diziyle ilişkili bir değişkendir. Bir diziye bellek ayırmak amacıyla yeniyi kullanmak için dizi öğelerinin türünü ve sayısını belirtmeniz gerekir. Yeni işlemle tahsis edilen dizideki öğeler otomatik olarak sıfıra başlatılacaktır. Aşağıdaki örnek, 12 öğeli bir tamsayı dizisi için bellek ayırır ve bunu Month_days değişkeniyle ilişkilendirir.
    ay_günler = yeni int;
    Bu ifade yürütüldükten sonra, ay_günleri on iki tam sayıdan oluşan bir diziye atıfta bulunacaktır. Daha sonra dizideki tüm öğeler sıfıra başlatılacaktır.
    Bir dizi elde etme süreci iki adımdan oluşur. Öncelikle istediğiniz türde bir dizi değişkeni bildirmeniz gerekir. İkinci olarak, yeni işlemi kullanarak diziyi içerecek belleği ayırmanız ve onu bir dizi değişkenine atamanız gerekir. Böylece, Java tüm diziler dinamik olarak tahsis edilir.

    Bir dizi için bellek ayırdığınızda, köşeli parantez içinde bir dizin belirterek dizi içindeki belirli bir öğeye erişebilirsiniz. Dizi elemanlarının numaralandırılması sıfırdan başlar. Dizi adları referanslardır.

    Dizi türünde bir değişken bildirmek ve bildirimde doğrudan diziye bellek tahsis etmenin bir kombinasyonu mümkündür:
    int ay_günler = yeni int;

    Bir dizinin negatif elemanlarını maksimum elemanla değiştiren bir programın kodunu düşünün:

    Genel sınıf FindReplace ( public static void main(String args) ( int myArray; // başlatma olmadan bildirim int mySecond = new int; /* varsayılan değerlere başlatma ile bellek tahsisi */ int a = (5, 10, 0, -5 , 16, -2); // başlatma ile bildirim int max = a; for (int i = 0; i< a.length; i++) { if (a[i]<0) a[i] = max; mySecond[i] = a[i]; System.out.println("a[" + i + "]=" + a[i]); } myArray = a; // установка ссылки на массив a } }

    Yürütmenin sonucu şöyle olacaktır:

    >java FindReplace a=5 a=10 a=0 a=5 a=16 a=5

    mySecond[i] = a[i] ataması, mySecond dizisinin öğelerinin bir kısmına, yani altısına, a dizisinin öğelerinin değerlerinin atanmasına neden olur. MySecond'un geri kalan öğeleri, başlatma sırasında elde edilen değerleri, yani sıfırları koruyacaktır. Atama mySecond = a veya myArray = a biçiminde düzenlenmişse, atamaya katılan her iki dizi de a dizisine bir referans alacaktır, yani her ikisi de altı öğe içerecek ve aynı bellek konumuna başvuracaktır.
    Diziler bildirildikleri anda başlatılabilirler. İşlem, basit türleri başlatmak için kullanılanla hemen hemen aynıdır. Dizi başlatıcısı küme parantezleriyle çevrelenmiş ifadelerin virgülle ayrılmış bir listesidir. Dizi, dizi başlatıcısında belirttiğiniz sayıda öğeyi içerecek kadar büyük otomatik olarak oluşturulacaktır. Yeni işlemi kullanmaya gerek yoktur. Örneğin, her aydaki gün sayısını depolamak için aşağıdaki kod, başlatılmış bir tamsayı dizisi oluşturur:

    Genel sınıf MonthDays ( public static void main(String args) ( intmonth_days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); System.out.println("Nisan " + ay_günleri + " günleri içerir."); ) )

    Programın yürütülmesi sonucunda ekranda aşağıdakiler görüntülenecektir:

    Nisan ayı 30 günden oluşur.

    Yorum: Java değerleri yanlışlıkla dizinin depolama alanı dışında saklamaya veya okumaya çalışmadığınızdan emin olmak için sıkı kontroller yapar. Yönetici sistem Java ayrıca tüm dizi indekslerinin doğru aralıkta olduğundan emin olmak için dikkatli kontroller yapar. (Bu konuda Java dillerden önemli ölçüde farklıdır C/C++, çalışma zamanı sınırlarının kontrolünü sağlamayan).

    Java'da Çok Boyutlu Diziler

    İÇİNDE Java çok boyutlu diziler aslında dizi dizileridir. Normal çok boyutlu diziler gibi görünür ve davranırlar. Ancak birkaç ince fark var. Çok boyutlu bir dizi değişkeni bildirmek için, her ek dizini farklı bir köşeli parantez kümesi kullanarak tanımlayın. Örneğin, aşağıdaki ifade twoD adında iki boyutlu bir dizi değişkeni bildirir:
    int ikiD = yeni int;
    4x5'lik bir dizi için bellek ayırır ve onu iki boyutlu değişkene atar. Dahili olarak, bu matris int türündeki tamsayılardan oluşan bir dizi dizisi olarak uygulanır.
    Çok boyutlu diziler başlatılabilir. Bunu yapmak için, her boyutun başlatıcısını kendi küme parantezleri içine eklemeniz yeterlidir.
    Aşağıdaki program, eşit uzunluktaki dizilerden (matrisler) oluşan diziler oluşturur ve başlatır ve bir matrisin diğeriyle çarpımını gerçekleştirir:

    Genel sınıf Matrix ( Private int a; Matrix(int ​​​​n, int m) ( // oluşturma ve rastgele a ile doldurma = new int[n][m]; for (int i = 0; i< n; ++i) for (int j = 0; j < m; ++j) a[i][j] = (int) (Math.random()*5); show(); } public Matrix(int n, int m, int k) { // создание и заполнение с random a = new int[n][m]; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) a[i][j] = k; if (k != 0) show(); } public void show() { System.out.println("Матрица:" + a.length + " на " + a.length); for (int i = 0; i < a.length; ++i) { for (int j = 0; j < a.length; ++j) System.out.print(a[i][j] + " "); System.out.println(); } } public static void main(String args) { int n = 2, m = 3, z = 4; Matrix p = new Matrix(n, m); Matrix q = new Matrix(m, z); Matrix r = new Matrix(n, z, 0); for (int i = 0; i < p.a.length; ++i) for (int j = 0; j < q.a.length; ++j) for (int k = 0; k < p.a[i].length; ++k) r.a[i][j] += p.a[i][k]*q.a[k][j]; System.out.println("Произведение матриц: "); r.show(); } }

    Değerler dizi elemanlarına random() yöntemi kullanılarak atandığından, kodu çalıştırma seçeneklerinden biri şu şekilde olabilir:

    > javac Matrix.java > java Matrix Matrix:2 x 3 3 2 0 3 3 1 Matris:3 x 4 1 2 2 3 3 2 3 2 1 2 3 2 Matrislerin çarpımı: Matris:2 x 4 9 10 12 13 13 14 18 17

    Aşağıdaki örnek bir dizinin kopyalanmasını gösterir:

    Genel sınıf ArrayCopyDemo ( public static void main(String args) ( int mas1 = (1,2,3), mas2 = (4,5,6,7,8,9); System.out.print("mas1: " ); show(mas1); System.out.print("mas2: "); show(mas2); // mas1 dizisini mas2'ye kopyalama System.arraycopy(mas1, 0, mas2, 2, 3); /* 0 - mas1 sıfır elemandan başlayarak kopyalanır * 2 - değiştirmenin başlayacağı eleman * 3 - kopyalanacak eleman sayısı */ System.out.println("\n arraycopy()'den sonra: "); System.out .print("mas1: " ); show(mas1); System.out.print("\nmas2: "); show(mas2); ) Private static void show(int mas) ( for (int i = 0; i< mas.length; ++i) System.out.print(" " + mas[i]); } }

    Programın yürütülmesinin sonucu:

    > javac ArrayCopyDemo.java > java ArrayCopyDemo mas1: 1 2 3mas2: 4 5 6 7 8 9 arraycopy()'den sonra: mas1: 1 2 3 mas2: 4 5 1 2 3 9

    Alternatif Dizi Bildirimi Söz Dizimi

    Bir diziyi bildirmek için kullanılabilecek başka bir form daha vardır:
    var-adı yazın;
    Burada köşeli parantezler dizi değişkeni adı yerine tür belirticisini takip eder. Örneğin aşağıdaki iki bildirim eşdeğerdir:

    Int al = yeni int; int a2 = yeni int;
    Burada sunulan bildirimler de eşdeğerdir:
    char twodi = yeni karakter; char twod2 = yeni karakter;
    Bu alternatif duyuru şekli öncelikle kolaylık sağlamak amacıyla eklenmiştir.