Kapitel 9. Arrays

Kapitlet forudsættes ikke i resten af bogen, men er nyttigt i praktisk programmering.

Forudsætter Kapitel 4, Objekter (og et enkelt sted Kapitel 6, Nedarvning).

Ofte har man behov for at håndtere et større antal objekter eller simple typer på en ensartet måde. Indtil nu har vi gjort det med lister af typen Vector, men Java understøtter også arrays.

Et array er en række data af samme type

Man kan f.eks. have et array af int eller et array af Point. Når man har et array af int, betyder det, at man har en række int-variabler som ligger i arrayet og kan ændres eller læses vha. arrayet og et indeks. Indekset er nummeret på variablen i arrayet - ligesom i Vector.

Ligesom med Vector skal man skelne mellem array-variablen og array-objektet. Array-variablen refererer til array-objektet, som indeholder variablerne.

9.1. Erklæring og brug

Man erklærer en array-variabel med den type data, man ønsker at lave et array af, umiddelbart efterfulgt af "[]", f.eks.:

    int[] arr;

Dette erklærer, at arr er en variabel med typen "array af int". Ligesom med variabler af objekt-type er dette blot en reference hen til det egentlige array-objekt. Hvis man ønsker at oprette et array, skriver man f.eks.:

    arr = new int[6];

Dette sætter arr til at referere til et array, der har 6 elementer.

Elementer i et array har som udgangspunkt værdien 0. Havde arrayet indeholdt referencer til objekter, var de blevet sat til null.

Arrayets værdier kan sættes og aflæses ved at angive indeks i firkantede []-parenteser efter variabelnavnet:

public class ArrayEksempel1
{
  public static void main(String[] args)
  {
    int[] arr = new int[6];
    arr[0] = 28;
    arr[2] = 13;

    arr[3] = arr[0] + arr[1] + arr[2];

    int længde = arr.length;    // = 6, da vi oprettede det med new int[6]

    for (int i=0; i<længde; i=i+1) System.out.print( arr[i] + " " );
    System.out.println();
  }
}

Resultatet bliver:

28 0 13 41 0 0

Indekseringen starter altid fra 0 af, og sidste lovlige indeks er dermed lig med arrayets længde-1. Indekserer man uden for arrayets grænser, kastes undtagelsen ArrayIndexOutOfBoundsException.

Alle arrays er objekter (derfor bruges new-operatoren, når vi opretter et nyt array). Alle array-objekter har variablen length, som fortæller hvor mange pladser arrayet indeholder.

Længden på et array kan ikke ændres

Selvom array-objekter ikke kan ændre længde, kan man lade variablen referere til et andet array-objekt med en anden længde:

    arr = new int[8];

Nu refererer arr til et andet array med længde 8 (og det gamle arrays og dets værdier er glemt).

9.1.1. Eksempel: Statistik

Arrays er gode til at lave statistik med. Her laver vi statistik på slag med to terninger:

import java.util.*;

public class TerningStatistik
{
  public static void main(String[] args)
  {
    int[] antal = new int[13];    // array med element nr. 0 til og med 12

    for (int i=0; i<100; i=i+1) 
    {
      int sum = (int) (6*Math.random()+1) + (int) (6*Math.random()+1);

      antal[sum] = antal[sum]+1;  // optæl statistikken for summen af øjne
    }

    for (int n=2; n<=12; n=n+1) System.out.println( n + ": " + antal[n]);
  }
}

Resultatet bliver:

2: 2
3: 9
4: 7
5: 17
6: 14
7: 15
8: 8
9: 9
10: 8
11: 7
12: 4