Klassen Random – Generera ett slumptal i Java


I Java finns en inbyggd klass, java.util.Random som man kan använda för att generera ett slumptal.

Hur genererar man ett slumptal i Java?

För att generera ett slumpmässigt tal i Java, kan man använda den inbyggda klassen Random. Klassen Random finns inbyggt i paketet java.utils och genom att importera detta paket, kan vi använda oss av dess inbyggda metoder.

För att generera ett slumpmässigt tal i Java, kan man använda den inbyggda klassen Random.

För att skapa ett slumptal i Java behöver man:

  • Importera klassen Random från paketet java.util.
  • Ange ett intervall som slumptalet ska genereras från.
  • Bestämma vilken datatyp som slumptalet ska ta, exempelvis ett heltal eller decimaltal etc.

Klassen Random i Java

I Java finns det ett standardpaket, java.util som innehåller flera samlingar av verktyg som ofta underlättar när man vill ha vissa egenskaper i sitt program. Ett inbyggt verktyg är klassen Random som genererar ett slumptal mellan ett intervall.

Klassen Random kan skapa ett slumptal av en viss datatyp, exempelvis en double, en float eller en int.

Klassen Random i Java:

  • Kommer från standardpaketet java.util.
  • Genererar ett slumpmässigt tal.
  • Skapar ett “Pseudorandom” tal (se nedan).

Hur skapar man ett slumptal i Java – Exempel

Det är enkelt att skapa ett slumptal i Java, det du behöver göra är:

  • Importera klassen Random från paketet java.utils
  • Skapa en instans av klassen Random.
  • Generera ett slumptal från instansen genom att bestämma vilket sorts tal som ska genereras, exempelvis ett heltal eller flyttal.

Exempel: Följande kod skriver ut ett heltal mellan 0 och 9:

import java.util.Random;                        // Importerar klassen Random
public class Slumptal {
    public static void main(String[] args) {
        Random rand = new Random();             // Skapar en instans av klassen random
        int randomInt = rand.nextInt(10);       // Genererar ett slumptal av typen int i intervallet 0 till 9
        System.out.println(randomInt);          // Skriver ut talet
    }
}

Förklaring:

Vi importerar först klassen Random med kommandot import java.util.Random. Detta måste vi göra för att komma åt alla metoder som ligger i klassen Random.

Sedan skapar vi en så kallad instans av klassen Random. Detta gör vi för att kunna använda de metoder som finns i klassen Random. I detta fall skapar vi en instans som vi ger namnet rand. Med rand kan vi kalla på de metoder som finns i klassen Random.

Avslutningsvis så skapar vi en variabel med namnet randomInt av datatypen int. Vi tilldelar ett slumptal med metoden nextInt() som genererar ett slumpmässigt heltal. I detta specifika fall anger vi även 10, det innebär att ett heltal kommer genereras mellan 0 och 9.

Metoder i Klassen Random

Klassen random innehåller massor av metoder som skapar olika slumpmässiga tal beroende på vad för slags slumptal du önskar. Exempelvis:

import java.util.Random;                        // Importerar klassen Random
public class Slumptal {
    public static void main(String[] args) {
        Random rand = new Random();             // Skapar en instans av klassen random
        System.out.println(rand.nextBoolean()); // Slumpmässig boolean
        System.out.println(rand.nextDouble());  // Slumpmässigt flyttal
        System.out.println(rand.nextInt());     // Slumpmässigt heltal
        System.out.println(rand.nextFloat());   // Slumpmässig float
        System.out.println(rand.nextLong());    // Slumpmässig long
    }
}

Vilket kommer ge slumpmässiga tal av den specifika datatypen varje gång man kör programmet. Exempelvis:

8
true
0.8512032215091105
382527602
0.75247055
7757674642800881858

Observera att detta bara är en exempelutskrift och att nya tal kommer genereras varje gång man kör koden.

I detta fall använder vi klassen Randoms inbyggda metoder för att generera ett slumptal av en viss datatyp, exempelvis metoden nextInt för ett heltal och nextDouble för ett flyttal och så vidare. Klassen Random innehåller dessutom ännu fler metoder med ytterligare egenskaper. För fullständig dokumentation kan man gå till oracles officiella dokumentation över klassen Random.

Generera ett slumptal mellan ett specifikt intervall i Java

På motsvarande sätt kan vi skapa ett slumptal mellan ett specifikt intervall. Klassen Random kommer alltid generera ett slumptal mellan 0 och den siffra man anger i metoden nextInt(). Följande kod skapar därför ett slumptal mellan ett specifikt intervall.

int slumptal = rand.nextInt(max - min) + min; 

Exempelvis, anger man max = 10 och min = -10 så kommer man få ett slumptal mellan -10 och 9. Observera alltså att maxtalet inte kommer vara ett av de tal som kan slumpas fram. Intervallet blir därför enligt:

min <= slumptal < max

Pseudorandom – Är slumpmässiga tal verkligen slumpmässiga?

Viktigt att komma ihåg är att en dator aldrig kan bli fullständigt slumpmässig. En dator gör aldrig någonting slumpmässigt, de är så kallade deterministiska, det vill säga en dator kommer alltid göra exakt det den blir tillsagd att göra och få exakt samma resultat varje gång den gör samma procedur. Det som händer i detta fall är helt enkelt att datorn använder matematiska algoritmer som är “tillräckligt” slumpmässiga, det vill säga, så pass slumpmässiga att vi som människor inte kan tolka det på ett annat sätt än just slumpmässigt.

Klassen Random genererar dessa så kallade pseudoslumpmässiga tal. Faktum är att klassen Random använder sig av ett så kallat seed som innebär att klassen Random har en gigantisk lista av förutbestämda tal. Varje gång metoden nextInt blir kallad på, tar den helt enkelt nästa värde som ligger i listan.

Det är möjligt att ange var i denna gigantiska lista av slumpmässiga tal man vill börja.

rand.setSeed(0);

Varje gång du kör ditt program, kommer du alltid få samma slumpmässiga tal, eftersom programmet alltid startar från samma position i listan. Så hur slumpmässigt är egentligen ett slumpmässigt tal?

För att komma runt detta använder klassen Random ett seed som är baserat på System.nanoTime(), det vill säga, den “nanosekund” som funktionen blev kallad på. Sannolikheten att samma nanosekund blir kallad på två gånger i rad är alltså mer eller mindre obefintligt.

Vanliga frågor och svar – Klassen Random

Hur skapar man ett random tal mellan 1 och N i Java?

Du kan skapa ett slumpmässigt tal inom intervallet min <= slumptal < max med följande kod: int slumptal = rand.nextInt(max - min) + min;

Finns det andra sätt att generera slumpmässiga tal än genom klassen Random?

Ja, exempelvis har klassen Math en randomfunktion.

Är sannolikhetsfördelning likformig i Klassen Random?

Som standard är klassen Random likformig sannolikhetsfördelad vilket innebär att det är samma sannolikhet alla tal blir slumpmässigt valda (likt ett tärningskast). Observera dock att det är möjligt att välja andra fördelningar i Klassen Random om så önskas.

Vad tyckte du om sidan?

Lämna gärna feedback och hjälp oss göra sidan bättre

Feedback gör oss bättre!

Lämna gärna feedback om vad du tyckte om avsnittet!