Java Academy · Lektion

Generera slumptal

Random och ThreadLocalRandom.

Lektion 2 av 413 steg

Generera slumptal är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Java Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Java Academy innehåller totalt 4 lektioner.

Generera slumptal

Slump används i spel, simuleringar och urval. Java erbjuder Math.random(), klassen Random och ThreadLocalRandom för samtidig kod.

Grunderna i Math.random

Math.random() returnerar en double i intervallet [0.0, 1.0): noll är inkluderat och ett är exkluderat.

public class Main {
    public static void main(String[] args) {
        double r = Math.random();
        System.out.println("Value between 0 and 1: " + r);
    }
}

Skala Math.random

Multiplicera och konvertera typen för att få ett heltalsintervall. (int)(Math.random() * 6) ger värden från 0 till 5.

public class Main {
    public static void main(String[] args) {
        int roll = (int)(Math.random() * 6) + 1;
        System.out.println("Dice: " + roll);
    }
}

Klassen Random

Klassen java.util.Random är mer flexibel. Skapa en instans och anropa sedan metoder som nextInt, nextDouble och nextBoolean.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        System.out.println(rng.nextBoolean());
        System.out.println(rng.nextDouble());
    }
}

nextInt med en övre gräns

nextInt(bound) returnerar ett int från 0, inkluderat, till bound, exkluderat. nextInt(6) ger värden från 0 till 5.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random();
        int value = rng.nextInt(100);
        System.out.println("0 to 99: " + value);
    }
}

Seed för reproducerbarhet

Om du skickar ett seed till konstruktorn blir sekvensen deterministisk: samma seed ger alltid samma tal. Det är ovärderligt vid testning.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random(42);
        System.out.println(rng.nextInt(1000));
        System.out.println(rng.nextInt(1000));
    }
}

Samma seed, samma sekvens

Två Random-objekt som skapas med samma seed ger identiska sekvenser. Det är användbart när ett fel måste återskapas exakt.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random a = new Random(7);
        Random b = new Random(7);
        System.out.println(a.nextInt(50) == b.nextInt(50));
    }
}

ThreadLocalRandom

I flertrådade program blir ett enda delat Random-objekt en flaskhals. ThreadLocalRandom.current() ger varje tråd sin egen generator utan konkurrens om samma resurs.

import java.util.concurrent.ThreadLocalRandom;

public class Main {
    public static void main(String[] args) {
        int value = ThreadLocalRandom.current().nextInt(1, 7);
        System.out.println("Dice: " + value);
    }
}

Dela aldrig ett Random-objekt mellan trådar

Skicka inte samma Random-instans till många trådar. Det kan leda till sämre fördelning och konkurrens om resursen. Använd helst ThreadLocalRandom i samtidig kod.

Doublevärden och gaussfördelningar

nextDouble() ger värden i [0,1), och nextGaussian() returnerar värden från en normalfördelning med medelvärdet 0 och standardavvikelsen 1.

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rng = new Random(1);
        System.out.println(rng.nextDouble());
        System.out.println(rng.nextGaussian());
    }
}

Välj rätt verktyg

Använd Math.random() för ett snabbt double-värde, Random när du vill ange gränser eller ett seed, och ThreadLocalRandom i samtidig kod. För slumptal i säkerhetskänsliga sammanhang ska du använda SecureRandom i stället.

Snabbtest

Testa dina kunskaper om slump.

Sammanfattning

Du har lärt dig att generera slumptal.

  • Math.random() ger en double i [0,1).
  • Random.nextInt(bound) ger värden från 0 till bound-1.
  • Ett seed gör sekvenser reproducerbara.
  • ThreadLocalRandom är det trådsäkra valet för samtidig kod.
Gratis att börja

Lär dig Java med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
104
Lektioner
374

Vanliga frågor

Är lektionen ”Generera slumptal” gratis?

Ja – hela texten till ”Generera slumptal” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Java Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Java Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Generera slumptal”?

Random och ThreadLocalRandom. Ni övar på Java Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Java Academy?

Du behöver inga förkunskaper. Utbildningen i Java Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Generera slumptal”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Java Academy-lektionen?

Ja. Varje Java Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Klassen Math
  2. Generera slumptal
  3. Slumpintervall och blandning
  4. Avrundning och gränser med Math
← Tillbaka till Java Academy