CodeGym/Java blog/Tilfældig/Noget om arrays
John Squirrels
Niveau
San Francisco

Noget om arrays

Udgivet i gruppen
Hej! Tidligere i din træning har vi arbejdet med enkelte objekter (og primitive typer). Men hvad nu hvis vi skal arbejde med en hel gruppe af objekter i stedet for kun én? Lad os for eksempel sige, at vi ønsker at oprette en liste over fødselsdage for alle ansatte i vores virksomhed. Den skal indeholde 30 strenge formateret som følger: "Sarah Huffman, 25. januar" Vi vil drage fordel af en speciel datastruktur kaldet et array . Hvis vi sammenligner et array med et rigtigt objekt, minder det meget om en bankboks med pengeskabe: Noget om arrays - 1Et array består også af "kasser". Du kan putte noget (et element) i hver kasse. For at få adgang til et element skal du kende dets boksnummer (indeks). Sådan oprettes et array:
public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10];

   }
}
Her laver vi et array, der rummer 10 elementer. Du kan straks bemærke nogle funktioner i arrayet:
  1. Den gemmer elementer af en veldefineret datatype . Hvis vi opretter et String-array, kan vi ikke gemme andet i det. Datatypen angives, når arrayet oprettes . Det er her, det adskiller sig fra en pengeskab (hvori en kunde kan opbevare, hvad han eller hun ønsker).

  2. Dens størrelse skal angives, når arrayet oprettes . Du kan ikke angive det senere eller ændre dets størrelse, efter at arrayet er oprettet .
Det faktum, at vi opretter et array, er angivet med firkantede parenteser på begge sider af udtrykket. De kan angives før eller efter navnet på referencevariablen. Uanset hvad vil virke:
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Hvis du vil skrive noget ind i et array, skal du angive indekset for boksen, hvor værdien skal skrives. Boksene i et array er nummereret fra 0. At tælle fra nul er en meget almindelig praksis i programmering. Jo hurtigere du vænner dig til det, jo bedre :) Noget om arrays - 2 Det betyder, at hvis du vil sætte noget værdi i den første boks , gør du dette:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
   }
}
Nu er Janas fødselsdag gemt i den første celle i vores række af medarbejderfødselsdage: Du kan tilføje andre værdier på lignende måde:
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";
   }
}
Bemærk, at vi tilføjede Rosies fødselsdag til den ottende boks (du har ikke glemt hvorfor boks nr. 7 er den ottende boks, vel?) . Du kan se, at vi ikke har udfyldt alle de andre celler. Vi behøver ikke at skrive værdier i et array i rækkefølge. Der er ikke noget sådant krav. At skrive elementer i rækkefølge gør det selvfølgelig meget nemmere at holde styr på, hvor mange kasser der er ledige og hvor mange der er optaget, og det forhindrer arrayet i at have "huller". Hvis du vil have indholdet af en af ​​kasserne, så skal du (ligesom med en pengeskab) kende nummeret. Sådan gøres det:
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);
   }
}
Konsoloutput: Rosie Mills, 3. januar Vi oprettede en Stringvariabel og fortalte compileren: "Find boksen med indeks 7 i fødselsdagsarrayet , og tildel værdien indeholdt der til variablen StringrosieBirthday " . Og det er præcis, hvad det gjorde. Når vi arbejder med arrays, kan vi nemt finde deres længde ved hjælp af en speciel egenskab: længde .
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);
   }
}
Konsoloutput: 10 Bemærk: lengthEgenskaben gemmer arraystørrelsen, ikke antallet af bokse, der er fulde. Vores array gemmer kun 3 værdier, men vi angav dens størrelse som 10, da vi oprettede den. Og det er præcis den værdi, som lengthfeltet returnerer. Hvorfor skulle dette være nyttigt? Tja, antag, at du vil vise en liste over alle fødselsdage (for at bekræfte, at ingen er glemt). Du kan gøre dette i en simpel løkke:
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]);
       }
   }
}
I løkken erklærer vi variablen i, som initialiseres til nul. Ved hver passage får vi elementet med indeks i fra vores array og viser dets værdi. Sløjfen vil udføre 10 iterationer, og i vil stige fra 0 til 9 – og tal er tilfældigvis indekserne for elementerne i vores array! Som et resultat vil vi vise alle værdier fra fødselsdage[0] til fødselsdage[9] Faktisk er der en anden måde, du kan oprette et array på. For eksempel kan du oprette et array af ints som dette:
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Denne teknik kaldes "genvejsinitialisering". Det er ret praktisk, fordi vi samtidig opretter et array og fylder det med værdier. Vi behøver ikke udtrykkeligt at angive array-størrelsen: med genvejsinitialisering lengthindstilles feltet automatisk.
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);
   }
}
Konsoloutput: 9 Nu lidt om, hvordan arrays gemmes i hukommelsen. Lad os sige, at vi har en række af tre Catobjekter:
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");
   }
}
Du skal forstå et par ting her:
  1. I tilfælde af primitiver lagrer et array et sæt specifikke værdier (f.eks. ints). I tilfælde af objekter gemmer et array et sæt referencer .
    Arrayet catsbestår af tre elementer, som hver er en reference til et Catobjekt. Hver af referencerne peger på hukommelsesadressen, hvor det tilsvarende objekt er gemt.

  2. Array-elementer er arrangeret i en enkelt blok i hukommelsen. Dette gøres for at gøre det muligt at få adgang til dem hurtigt og effektivt.
Refererer således catstil den hukommelsesblok, hvor alle objekter (array-elementer) er gemt. Cats[0]refererer til en specifik adresse i denne blok. Noget om arrays - 3 Det er vigtigt at forstå, at et array ikke kun gemmer objekter: det er et objekt selv. Dette får os til at stille spørgsmålstegn ved, om vi ikke kun kan skabe en række af strenge eller tal, men også arrays af arrays . Og svaret er ja, det kan vi! Et array kan gemme alle objekter, inklusive andre arrays. Et sådant array kaldes todimensionelt . Hvis vi skulle repræsentere det visuelt, vil det være meget lig et almindeligt bord. Antag, at vi ønsker at skabe et array med 3 arrays , der hver kan lagre 10 ints. Det ville se sådan ud:
Noget om arrays - 4
Hver linje repræsenterer en intmatrix. Den første matrix indeholder tal fra 1 til 10, den anden matrix - fra -1 til -10, og den tredje - et sæt tilfældige tal. Hver af disse arrays er gemt i kasserne i vores todimensionelle array. I kode ser initialisering af et todimensionelt array sådan ud:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Vores to-dimensionelle array- katte opbevarer 3 arrays med 5 kasser i hvert array. Hvis vi vil placere et objekt i den tredje boks i det andet array, ville vi gøre dette:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluffy");
}
[1]angiver det andet array og [2]angiver den tredje boks i det array. Fordi et todimensionelt array består af flere arrays, for at iterere gennem det og vise alle dets værdier (eller udfylde alle dets elementer), har vi brug for en indlejret sløjfe:
for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
I den ydre sløjfe (variabel i) itererer vi over alle arrays i vores todimensionelle array. I den indre løkke (variabel j) passerer vi gennem alle elementerne i hvert array. Som et resultat vil cats[0][0] (første array, første element) blive vist først, efterfulgt af cats[0][1] (første array, andet element). Efter vi har gennemgået det første array, vil vi vise cats[1][0] , cats[1][1] , cats[1][2] osv. Todimensionelle arrays understøtter i øvrigt også stenografi initialisering:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Normalt ville vi erklære den todimensionelle matrix numberssom en int[3][3], men denne stenografi lader os specificere værdierne med det samme. Hvorfor skulle du bruge et todimensionelt array? Nå, du kunne bruge en til nemt at genskabe det berømte "Battleship"-spil: Noget om arrays - 5 I "Battleship" kan strukturen af ​​spillefeltet nemt beskrives: et todimensionelt array med 10 arrays med hver 10 elementer. Du opretter to af disse arrays (en til dig og en til din modstander)
int[][] battleshipBoard1 = new int[10][10];
int[][] battleshipBoard2 = new int[10][10];
brug nogle værdier (f.eks. tal eller symboler) til at udfylde de elementer, der svarer til placeringen af ​​dine skibe, og skiftes til at kalde koordinaterne for specifikke elementer:
  • slagskibBoard1[0][2]!
  • Gå glip af! battleshipBoard2[2][4]!
  • Hit!
  • slagskibBoard2[2][5]!
  • Hit!
  • slagskibBoard2[2][6]!,
  • Sænket!
Dette afslutter vores første introduktion af arrays, men det er kun begyndelsen på vores interaktion med dem. I de følgende lektioner vil vi se interessante måder, de kan bruges på, og også lære, hvilke indbyggede funktioner Java har for at lade os arbejde med denne datastruktur mere bekvemt :)
Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu