CodeGym /Blog Jawa /Acak /Soko babagan array
John Squirrels
tingkat
San Francisco

Soko babagan array

Diterbitake ing grup
Hi! Sadurunge ing latihan sampeyan, kita wis nggarap obyek tunggal (lan jinis primitif). Nanging apa yen kita kudu nggarap kabeh klompok obyek tinimbang mung siji? Contone, ujar manawa kita pengin nggawe dhaptar ulang tahun kabeh karyawan ing perusahaan kita. Sampeyan kudu ngemot 30 senar sing diformat kaya ing ngisor iki: "Sarah Huffman, 25 Januari" Kita bakal entuk manfaat saka struktur data khusus sing diarani array . Yen kita mbandhingaké Uploaded kanggo obyek nyata, iku banget padha karo vault bank karo safety kothak simpenan: Soko babagan array - 1Uploaded uga kasusun saka "kothak". Sampeyan bisa sijine soko (unsur) menyang saben kothak. Kanggo ngakses unsur, sampeyan kudu ngerti nomer kothak (indeks). Mangkene carane array digawe:

public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10];
      
   }
}
Ing kene kita nggawe array sing ngemot 10 unsur. Sampeyan bisa langsung nyathet sawetara fitur saka array:
  1. Iki nyimpen unsur jinis data sing wis ditemtokake kanthi apik . Yen kita nggawe array String, kita ora bisa nyimpen apa-apa liyane ing. Jinis data ditemtokake nalika larik digawe . Iki ngendi iku bedo saka safety deposit box (ing kang customer bisa nyimpen apa utawa dheweke kepengin).

  2. Ukurane kudu ditemtokake nalika larik digawe . Sampeyan ora bisa nuduhake mengko utawa ngganti ukuran sawise larik digawe .
Kasunyatan bilih kita nggawe larik dituduhake dening kurung kothak ing loro-lorone ekspresi kasebut. Bisa ditemtokake sadurunge utawa sawise jeneng variabel referensi. Salah siji cara bakal bisa:

String [] birthdays = new String[10];
String birthdays [] = new String[10];
Yen sampeyan pengin nulis soko menyang Uploaded, sampeyan kudu nemtokake indeks saka kothak ngendi Nilai bakal ditulis. Kothak ing larik diwenehi nomer wiwit saka 0. Ngetung wiwit saka nol iku laku umum banget ing program. Sing luwih cepet sampeyan wis biasa, luwih apik :) Soko babagan array - 2 Iki tegese, yen sampeyan pengin menehi sawetara nilai ing kothak pisanan , sampeyan kudu nindakake iki:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
   }
}
Saiki ulang tahun Jana disimpen ing sel pisanan saka ulang tahun karyawan: Sampeyan bisa nambah nilai liyane kanthi cara sing padha:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";
   }
}
Elinga yen kita nambahake ulang tahun Rosie menyang kothak kaping wolu (sampeyan ora lali kenapa Kotak No. 7 minangka kothak kaping wolu, ta?) . Sampeyan bisa ndeleng manawa kita durung ngisi kabeh sel liyane. Kita ora kudu nulis nilai menyang array supaya. Ora ana syarat kasebut. Mesthi, unsur nulis supaya luwih gampang kanggo nglacak carane akeh kothak free lan carane akeh sing dikuwasani, lan ngalangi Uploaded saka duwe "bolongan". Yen sampeyan pengin njaluk isi salah siji saka kothak, banjur (kaya karo safety deposit box) sampeyan kudu ngerti nomer. Mangkene carane ditindakake:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       String rosieBirthday = birthdays[7];
       System.out.println(rosieBirthday);
   }
}
output Console: Rosie Mills, 3. Januari We digawe Stringvariabel lan marang compiler: "Golek kothak karo indeks 7 ing ulang Uploaded , lan nemtokake Nilai sing ana ing rosieBirthdayString variabel ". Lan pancen apa sing ditindakake. Nalika nggarap array, kita bisa nemokake dawa kanthi gampang nggunakake properti khusus: dawa .

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
Output konsol: 10 Wigati: lengthProperti nyimpen ukuran array, dudu jumlah kothak sing kebak. Array kita mung nyimpen 3 nilai, nanging kita nuduhake ukurane minangka 10 nalika kita nggawe. Lan iki persis nilai sing lengthbali lapangan. Yagene iki bakal migunani? Inggih, umpamane sampeyan pengin nampilake dhaptar kabeh ulang tahun (kanggo verifikasi manawa ora ana sing lali). Sampeyan bisa nindakake iki ing siji loop prasaja:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[2] = "Jeremiah Leonard, July 12";
       birthdays [3] = "Kenny Russo, September 7";
       birthdays[4] = "Tommie Barnes, November 9";
       birthdays [5] = "Roman Baranov, August 14";
       birthdays [6] = "Chanice Andersen, April 1";
       birthdays[7] = "Rosie Mills, January 3";
       birthdays [8] = "Keenan West, October 19";
       birthdays [9] = "Abraham McArthur, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
Ing daur ulang, kita ngumumake variabel i, sing diinisialisasi dadi nol. Ing saben pass, kita entuk unsur kanthi indeks i saka array kita lan nampilake nilai kasebut. Daur ulang bakal nindakake 10 iterasi, lan aku bakal nambah saka 0 dadi 9-lan nomer dadi indeks saka unsur array kita! Akibaté, kita bakal nampilake kabeh nilai saka ulang tahun[0] nganti ulang tahun[9] Bener, ana cara liya kanggo nggawe larik. Contone, sampeyan bisa nggawe array s intkaya iki:

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Teknik iki diarani "inisialisasi trabasan". Iku cukup trep, amarga kita bebarengan nggawe Uploaded lan isi karo nilai. Kita ora kudu nemtokake ukuran array kanthi jelas: kanthi inisialisasi trabasan, lapangan lengthdisetel kanthi otomatis.

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
       System.out.println(numbers.length);
   }
}
Output konsol: 9 Saiki, sethithik babagan carane array disimpen ing memori. Ayo kita duwe array saka telung Catobyek:

public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Behemoth");
       cats[2] = new Cat("Lionel Messi");
   }
}
Sampeyan kudu ngerti sawetara perkara ing kene:
  1. Ing kasus primitif, array nyimpen sakumpulan nilai tartamtu (eg ints). Ing kasus obyek, array nyimpen sakumpulan referensi .
    Array kasebut catsdumadi saka telung unsur, sing saben-saben minangka referensi kanggo Catobyek. Saben referensi nuduhake alamat memori ing ngendi obyek sing cocog disimpen.

  2. Unsur Array disusun ing blok siji ing memori. Iki ditindakake supaya bisa diakses kanthi cepet lan efisien.
Mangkono, catsreferensi pemblokiran memori ngendi kabeh obyek (unsur array) disimpen. Cats[0]referensi alamat tartamtu ing blok iki. Soko babagan array - 3 Iku penting kanggo ngerti sing array ora mung nyimpen obyek: iku obyek dhewe. Iki ndadékaké kita takon apa kita bisa nggawe ora mung array saka strings utawa nomer, nanging uga arrays arrays . Lan jawabane ya, kita bisa! Array bisa nyimpen obyek apa wae, kalebu array liyane. Array kasebut diarani rong dimensi . Yen kita makili kanthi visual, bakal meh padha karo tabel biasa. Upaminipun, kita arep nggawe Uploaded 3 array sing saben bisa nyimpen 10 ints. Iku bakal katon kaya iki:
Soko babagan susunan - 4
Saben baris nggambarake intarray. Array pisanan ngemot nomer saka 1 nganti 10, array kapindho - saka -1 nganti -10, lan nomer telu - sakumpulan nomer acak. Saben larik iki disimpen ing kothak larik loro-dimensi kita. Ing kode, initialization saka array rong dimensi katon kaya iki:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Kucing array rong dimensi kita nyimpen 3 array kanthi 5 kothak ing saben array. Yen kita pengin nyelehake obyek ing kothak katelu saka array kapindho, kita bakal nindakake iki:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluffy");
}
[1]nuduhake array kapindho, lan [2]nuduhake kothak katelu saka array kasebut. Amarga array loro-dimensi kasusun saka sawetara array, supaya bisa ngulang lan nampilake kabeh nilai (utawa isi kabeh unsur), kita butuh loop nested:

for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
Ing daur ulang njaba (variabel i), kita ngulang kabeh array ing array rong dimensi. Ing daur ulang utama (variabel j), kita ngliwati kabeh unsur saben array. Akibaté, cats[0][0] (array pisanan, unsur pisanan) bakal ditampilake pisanan, ngiring dening cats[0][1] (array pisanan, unsur kapindho). Sawise kita ngliwati array pisanan, kita bakal nampilake cats[1][0] , cats[1][1] , cats[1][2] , etc. Miturut cara, array rong dimensi uga ndhukung shorthand initialization:

int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Biasane, kita bakal ngumumake array rong dimensi numbersminangka int[3][3], nanging shorthand iki ngidini kita nemtokake nilai kasebut kanthi cepet. Napa sampeyan butuh array rong dimensi? Inggih, sampeyan bisa nggunakake siji kanggo gampang nggawé ulang "Battleship" game misuwur: Soko babagan susunan - 5 Ing "Battleship", struktur lapangan playing bisa diterangake gampang: Uploaded loro-dimensi saka 10 susunan karo 10 unsur saben. Sampeyan nggawe loro array iki (siji kanggo sampeyan lan siji kanggo mungsuh)

int[][] battleshipBoard1 = new int[10][10];
int[][] battleshipBoard2 = new int[10][10];
gunakake sawetara nilai (umpamane nomer utawa simbol) kanggo isi unsur sing cocog karo lokasi kapal sampeyan, banjur gantian nelpon koordinat kanggo unsur tartamtu:
  • Papan perang1[0][2]!
  • Mbak! Papan perang2[2][4]!
  • Pukul!
  • Papan perang2[2][5]!
  • Pukul!
  • Papan perang2[2][6]!,
  • Sunk!
Iki rampung introduksi pisanan kita array, nanging mung awal interaksi kita karo wong-wong mau. Ing pawulangan ing ngisor iki, kita bakal weruh cara sing menarik sing bisa digunakake, lan uga sinau apa fungsi sing dibangun ing Jawa supaya kita bisa nggarap struktur data iki kanthi luwih gampang :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION