Soru Java'da bir diziyi nasıl ilan edip başlatabilirim?


Java'da bir diziyi nasıl ilan edip başlatabilirim?


1617
2017-07-29 14:22


Menşei


Java 10, dizi tanımlamasını sağlar var? - gstackoverflow


Cevaplar:


Dizi bildirimi ya da dizgi değişmezini kullanabilirsiniz (ancak yalnızca hemen değişkeni bildirip etkilediğinizde, dizi değişmezleri bir diziyi yeniden atamak için kullanılamaz).

İlkel tipler için:

int[] myIntArray = new int[3];
int[] myIntArray = {1,2,3};
int[] myIntArray = new int[]{1,2,3};

Örneğin sınıflar için String, aynısı:

String[] myStringArray = new String[3];
String[] myStringArray = {"a","b","c"};
String[] myStringArray = new String[]{"a","b","c"};

İlklendirmenin üçüncü yolu, diziyi önce bildirdiğinizde ve sonra başlattığınızda yararlıdır. Oyuncu burada gerekli.

String[] myStringArray;
myStringArray = new String[]{"a","b","c"};

2192
2017-07-09 21:59



Bunu yapmak için ikinci ve üçüncü yollara sahip olmanın amacı nedir? - Quazi Irfan
@iamcreasy Ikinci yol iade deyimleri ile çalışmıyor gibi görünüyor. return {1,2,3} bir hata verirken return new int[]{1,2,3} iyi çalışır (tabiki fonksiyonunuzun bir tamsayı dizisi döndürdüğünü varsayarak). - Skylar Ittner
@SkylarMT Ama yine de iade beyanı ile kullanmak için ilk yolu kullanabilirsiniz. - Quazi Irfan
@iamcreasy Geçenlerde bir dizi ints döndüren bir işlev yazdım. Eğer işlevin içinde bir hata olsaydı, belirli bir değer döndürmesini istedim, ama bir dizi döndürmek için gereken fonksiyon. Tek yönlü dönüş beyanı için hangi yol çalışır? Sadece üçüncüsü. - Skylar Ittner
@apadana İkinci durumda, yalnızca kapsama alanında (işlev veya herhangi bir şekilde) tanımlanan bir anonim nesne oluşturuyorsunuz. Arayana geri döndükten sonra artık geçerli değil. Yeni anahtar kelimeyi kullanarak, yeni nesneyi yığından ayırırsınız ve tanımlayıcı kapsam dışındadır. - teukkam


İki tür dizi vardır.
 

Tek Boyutlu Dizi

Varsayılan değerler için sözdizimi:

int[] num = new int[5];

Veya (daha az tercih edilir)

int num[] = new int[5];

Verilen değerlere sahip sözdizimi (değişken / alan başlatma):

int[] num = {1,2,3,4,5};

Veya (daha az tercih edilir)

int num[] = {1, 2, 3, 4, 5};

Not: Kolaylık için [] num tercih edilir çünkü burada dizi hakkında konuştuğunuzu açıkça belirtir. Aksi takdirde fark yoktur. Bir şey değil.

Çok boyutlu dizi

deklarasyon

int[][] num = new int[5][2];

Veya

int num[][] = new int[5][2];

Veya

int[] num[] = new int[5][2];

Başlatma

 num[0][0]=1;
 num[0][1]=2;
 num[1][0]=1;
 num[1][1]=2;
 num[2][0]=1;
 num[2][1]=2;
 num[3][0]=1;
 num[3][1]=2;
 num[4][0]=1;
 num[4][1]=2;

Veya

 int[][] num={ {1,2}, {1,2}, {1,2}, {1,2}, {1,2} };

Düzgünleştirilmiş Dizi (veya Dikdörtgen Olmayan Dizi)

 int[][] num = new int[5][];
 num[0] = new int[1];
 num[1] = new int[5];
 num[2] = new int[2];
 num[3] = new int[3];

Yani burada sütunları açıkça tanımlıyoruz.
Diğer yol: 

int[][] num={ {1}, {1,2}, {1,2,3,4,5}, {1,2}, {1,2,3} };

Erişim için:

for (int i=0; i<(num.length); i++ ) {
    for (int j=0;j<num[i].length;j++)
        System.out.println(num[i][j]);
}

Alternatif:

for (int[] a : num) {
  for (int i : a) {
    System.out.println(i);
  }
}

Düzgün diziler çok boyutlu dizilerdir.
Açıklama için çok boyutlu dizi detayına bakınız. resmi java eğiticileri


222
2017-07-29 14:29



Birincisi, varsayılan değerlere sahip bir dizi yerine boş / boş bir diziye yönlendirilmeyecek mi? - vipin8169
Bu noktada hemfikirim ve bir tane daha özellik ekleyebiliriz, boyutu dinamik olarak değiştirebiliriz. - AdamIJK
Çok boyutlu bir dizinin dizinin farklı bir "tipi" olduğu konusunda sizinle tartışabilirim. Diğer dizileri içeren bir dizi tanımlamak için kullanılan bir terimdir. Hem dış diziler hem de iç diziler (ve eğer varsa, aralarındakiler) sadece düzenli dizilerdir. - tradeJmark


Type[] variableName = new Type[capacity];

Type[] variableName = {comma-delimited values};



Type variableName[] = new Type[capacity]; 

Type variableName[] = {comma-delimited values};

ayrıca geçerlidir, ancak türden sonra parantezleri tercih ederim, çünkü değişkenin türünün aslında bir dizi olduğunu görmek daha kolay.


116
2017-07-29 14:28



Bu noktada katılıyorum. Değişkenin türü "TYPE" değil, aslında bir TYPE [], bu yüzden benim için bu şekilde yazmak mantıklı. - Chet
Google stili bunu da öner. - wener
Bunu not et int[] a, b; ile aynı olmayacak int a[], b;Eğer ikinci formu kullanırsanız, kolay bir hata. - Jeroen Vannevel


Java'da bir dizi bildirebileceğiniz çeşitli yollar vardır:

float floatArray[]; // Initialize later
int[] integerArray = new int[10];
String[] array = new String[] {"a", "b"};

Daha fazla bilgiyi Güneş öğretici site ve javadoc.


32
2017-07-29 14:29





Her bir parçayı anlamanız yararlı olur.

Type[] name = new Type[5];

Type[] öyle mi tip arasında değişken ad denir ("isim" denir tanımlayıcı). Temel "Tür" ü taban tipidir ve köşeli ayraçlar bu tablonun dizi tipi anlamına gelir. Dizi türleri, kendileri gibi çokboyutlu diziler yapmanıza olanak veren kendi türlerine dönüşürler. Type[][] (Tip [] dizi tipi. Anahtar kelime new yeni dizi için bellek ayırmak için diyor. Braket arasındaki sayı, yeni dizinin ne kadar büyük olacağını ve ne kadar bellek ayırdığını belirtir. Örneğin, Java'nın taban türünü bilmesi durumunda Type 32 bayt alır ve bir boyut 5 dizisi istersiniz, dahili olarak 32 * 5 = 160 bayt ayırmak gerekir.

Ayrıca, oradaki değerlerle birlikte diziler de oluşturabilirsiniz.

int[] name = {1, 2, 3, 4, 5};

sadece boş alanı yaratmaz, aynı zamanda bu değerlerle doldurur. Java, ilkellerin tamsayı olduğunu ve bunların 5 tane olduğunu söyleyebilir, böylece dizinin boyutu örtük olarak belirlenebilir.


26
2018-06-04 06:02



Yani dahil etmek gerekli değildir int[] name = new int[5] ? - Cookie Monster


Aşağıdaki bir dizinin bildirimini gösterir, ancak dizi başlatılmamış:

 int[] myIntArray = new int[3];

Aşağıdakiler, dizinin başlatılmasının yanı sıra bildirimi de gösterir:

int[] myIntArray = {1,2,3};

Şimdi, aşağıdakiler de dizinin başlatılmasının yanı sıra bildirimi de gösterir:

int[] myIntArray = new int[]{1,2,3};

Ancak bu üçüncüsü, "myIntArray" referans değişkeni tarafından işaret edilen anonim dizi nesnesi yaratma özelliğini gösterir, bu yüzden sadece "new int [] {1,2,3}; sonra anonim dizi nesnesi nasıl oluşturulabilir.

Eğer sadece yazarsak:

int[] myIntArray;

Bu dizi bildirimi değildir, ancak aşağıdaki ifade yukarıdaki beyanı tamamlar:

myIntArray=new int[3];

26
2017-07-29 14:25



İkinci yaklaşımdan başka, ikinci ve üçüncü yaklaşımlar arasında kesinlikle bir fark yoktur. bir tek Ayrıca bir değişken bildirdiğinizde çalışır. "Anonim dizi nesnesi yaratma özelliğini gösterir" ile ne demek istediğinizi net olarak değil, ama gerçekten eşdeğer kod parçalarıdır. - Jon Skeet
Ayrıca, ilk snippet yapar diziyi başlat - her dizi öğesi için 0 değerine sahip olması garantilenir. - Jon Skeet


Alternatif olarak,

// Either method works
String arrayName[] = new String[10];
String[] arrayName = new String[10];

Bu bir dizi denir arrayName 10 numara (kullanmanız için 0'dan 9'a kadar öğeleriniz var).


22
2017-07-29 15:56



Kullanılacak standart nedir? Ben sadece eski keşfetti ve ben dehşet verici yanıltıcı buluyorum: - Anti Earth
Benim değere göre, profesörüm ikinci yolun Java'da daha tipik olduğunu ve neler olup bittiğini daha iyi aktardığını söyledi; değişken olarak tür ile ilgili bir dizi olarak döküm edildi. - Celeritas
Bir yan not için: Kötü dilde tasarım anlamına gelen bir şeyi bildirmek için birden fazla semantiğe sahip bir dil. - Muhammad Suleman


Ayrıca, daha dinamik bir şey istiyorsanız, Liste arabirimi vardır. Bu da iyi performans göstermez, ancak daha esnektir:

List<String> listOfString = new ArrayList<String>();

listOfString.add("foo");
listOfString.add("bar");

String value = listOfString.get(0);
assertEquals( value, "foo" );

22
2018-01-28 19:19



Oluşturduğunuz listede "<>" denen şey nedir? - CyprUS


Bir dizi yapmak için iki ana yol vardır:

Bu boş bir dizi için:

int[] array = new int[n]; // "n" being the number of spaces to allocate in the array

Ve bu bir başlangıç ​​dizisi için:

int[] array = {1,2,3,4 ...};

Bunun gibi çok boyutlu diziler de yapabilirsiniz:

int[][] array2d = new int[x][y]; // "x" and "y" specify the dimensions
int[][] array2d = { {1,2,3 ...}, {4,5,6 ...} ...};

12
2018-05-23 19:56





İlkel tip al int Örneğin. Bildirmek için çeşitli yollar var ve int dizi:

int[] i = new int[capacity];
int[] i = new int[] {value1, value2, value3, etc};
int[] i = {value1, value2, value3, etc};

tüm bunların içinde nerede kullanabilirsiniz int i[] yerine int[] i.

Yansıması ile kullanabilirsiniz (Type[]) Array.newInstance(Type.class, capacity);

Yöntem parametrelerinde, ... gösterir variable arguments. Esas olarak, herhangi bir sayıda parametre iyidir. Kodla açıklamak daha kolay:

public static void varargs(int fixed1, String fixed2, int... varargs) {...}
...
varargs(0, "", 100); // fixed1 = 0, fixed2 = "", varargs = {100}
varargs(0, "", 100, 200); // fixed1 = 0, fixed2 = "", varargs = {100, 200};

Yöntemin içinde varargs normal olarak tedavi edilir int[]. Type... sadece yöntem parametrelerinde kullanılabilir, bu yüzden int... i = new int[] {} derleme yapmaz.

Bir notu geçerken int[] bir yönteme (veya başka bir Type[]), üçüncü yolu kullanamazsınız. İfadede int[] i = *{a, b, c, d, etc}*, derleyici {...} bir anlam int[]. Ama bunun nedeni bir değişken bildirmenizdir. Bir diziyi bir yönteme geçirirken, bildirim ya new Type[capacity] veya new Type[] {...}.

Çok Boyutlu Diziler

Çok boyutlu diziler ile başa çıkmak çok daha zordur. Esasen, bir 2D dizi dizilerin dizisidir. int[][] bir dizi demektir int[]s. Anahtar eğer bir int[][] olarak bildirildi int[x][y], maksimum dizin i[x-1][y-1]. Esas olarak bir dikdörtgen int[3][5] geçerli:

[0, 0] [1, 0] [2, 0]
[0, 1] [1, 1] [2, 1]
[0, 2] [1, 2] [2, 2]
[0, 3] [1, 3] [2, 3]
[0, 4] [1, 4] [2, 4]

9
2018-01-20 11:54





Yansımaları kullanarak diziler oluşturmak istiyorsanız, bunu yapabilirsiniz:

 int size = 3;
 int[] intArray = (int[]) Array.newInstance(int.class, size ); 

7
2017-10-16 10:18