Basale typer og kontrolstrukturer i Java

Oprettet 12-04-1999 Bjarne Larsen

I det følgende er nogle af Javas basale datatyper og kontrolstrukturer gennemgået ved hjælp af en række eksempler. Eksemplerne er på ingen måde tænkt som en udtømmende beskrivelse af sprogets muligheder; men udelukkende som en introduktion til sproget. Eksemplerne skal suppleres med mere udførlige beskrivelser af bl.a. sprogets syntaks og udviklingsmiljøets muligheder. Der kan i den forbindelse henvises til de relevante manualer, som alle findes on-line i udviklingsmiljøets hjælpefiler.

Eksempel 1. Gentagelser og tælleværker.

Lad maskinen tælle til ti. De enkelte tal udskrives under hinanden på skærmen.

Opstilling af drejebog:

1

2

3

4

5

6

7

8

9

10

Programmets struktur:

Ved valg af en struktur til programmet har man flere muligheder. En nærliggende mulighed ville være at udføre 10 sætninger efter hinanden, der hver udskriver det næste tal i rækken:

class Eks001a

{

public static void main (String [] args)

{

System.out.println(" 1");

System.out.println(" 2");

System.out.println(" 3");

System.out.println(" 4");

System.out.println(" 5");

System.out.println(" 6");

System.out.println(" 7");

System.out.println(" 8");

System.out.println(" 9");

System.out.println("10");

}

}

Selv om det er forholdsvis let at lave en sådan løsning, er det klart, at den ikke er særlig hensigtsmæssig. Forestil dig f.eks. at du får til opgave at lave et program, som kan tælle til 1.000.000 i stedet for til 10.

Gentagelser og variabler.

En af de vigtigste egenskaber ved en datamaskine er dens evne til udføre den samme instruktion - eller en sekvens af instruktioner - flere gange.

Hvis man skal kunne erstatte de 10 skrivesætninger i eksempel 1a med en enkelt, må det, der skal udskrives, kunne varieres, og hermed indføres begrebet en variabel.

I eksempel 1a vil det være rimeligt at indføre en numerisk heltalsvariabel, som skal kunne antage værdierne fra 1 til 10. En sådan variabel kan man også kalde en tællevariabel. Herved kan der spares 9 skriveinstruktioner; men til gengæld skal der medtages nogle andre instruktioner.

For det første skal tællevariablen tildeles en startværdi inden gentagelsen begynder. Dette sker - til manges store overraskelse - ikke automatisk.

For det andet skal tællevariablens værdi forhøjes med én, hver gang den er blevet udskrevet i gentagelsen.

Endelig skal det undersøges, om slutværdien er nået, i hvilket tilfælde gentagelsen skal stoppes.

Styring af gentagelser.

Der kan tænkes mange forskellige måder til styring af afslutningen på en gentagelse. Dette indikerer, at gentagelser er meget vigtige konstruktionselementer, som bruges tit, når en databehandlingsopgave skal omsættes til et program. I det følgende skal vi se eksempler på tre forskellige måder at styre gentagelsen på. Som det vil fremgå af eksemplerne, er det ikke lige meget, hvilken metode, man anvender; men det kan være svært for begynderen at afgøre hvilken metode, der er den bedste i en given situation.

// Eksemp1b

class Eks001b

{

public static void main (String [] args)

{

int Taeller;

for (Taeller = 1; Taeller <= 10; Taeller++)

{

System.out.println(Taeller);

}

}

}

// Eksemp1c

class Eks001c

{

public static void main (String [] args)

{

int Taeller;

Taeller = 0;

do

{

Taeller++;

System.out.println(Taeller);

}

while (Taeller < 10);

}

}

// Eksemp1d

class Eks001d

{

public static void main (String [] args)

{

int Taeller;

Taeller = 0;

while (Taeller < 10)

{

Taeller++;

System.out.println(Taeller);

}

}

}

Hvilken styringsmetode til gentagelser er bedst?

Det er ikke altid muligt at udpege en enkelt styringsmetode som værende bedre end andre i en given situation. Ofte er valget af metode et udslag af vane eller smag og behag.

Det vigtigste, man egentlig kan sige om valget af metode, er, at man skal vælge en metode, som man er fortrolig med, fordi man på denne måde undgår at lave fejl i forbindelse med opstilling af betingelser og lignende.

Det skal dog samtidig slås fast, at hvis man behersker flere af de viste styringsmetoder, så har man bedre mulighed for at udarbejde en kort og overskuelig løsning på et givet problem.

I det følgende er der defor forsøgt opstillet nogle tommelfingerregler for, hvornår man bør anvende de forskellige styringsmetoder.

FOR

Denne metode kan med stor fordel anvendes i situationer, hvor en tællevariabel ønskes forøget eller formindsket i faste spring (ofte i spring på én), og hvor start- og slutværdien er et kendt heltal.

DO ... WHILE

Denne metode kan med fordel anvendes, når slutbetingelsen ikke er knyttet til en tællevariabel og gentagelsen skal udføres mindst én gang.

Selv om slutbetingelsen ikke nødvendigvis skal være knyttet til tællevariabel, sådan som i FOR .. TO konstruktionen, kan der dog godt indgå en tællevariabel i slutbetingelsen; men i så fald skal man selv sørge for at initiere den, inden gentagelsen påbegyndes, og man skal også selv forøge eller formindske dens værdi i hvert gennemløb. Det giver til gengæld mulighed for at forøge eller formindske med andre værdier end 1.

WHILE

Denne metode anvendes i situationer, hvor gentagelsesbetingelsen ikke nødvendigvis er knyttet en tællevariabel. I modsætning til DO ... WHILE, som altid vil blive udført mindst én gang, styres WHILE ... DO af en gentagelsesbetingelse, som testes før gentagelsen udføres, og man kan derfor undgå at udføre gentagelsen, hvis gentagelsesbetingelsen ikke er opfyldt fra starten.

Herved kommer gentagelsesbetingelsen til at virke som en vagtpost, der bestemmer, om gentagelsen skal udføres. Heraf følger den engelske betegnelse, som man ofte benytter om denne type gentagelser: sentinel-styrede gentagelser. Det engelske ord sentinel betyder bevogtning.

Der kan godt indgå en tællevariabel i betingelsen; men i så fald skal man selv initiere den, før gentagelsen påbegyndes, ligesom man selv skal forøge eller formindske dens værdi i hvert gennemløb af gentagelsen.