Archief - java array opvullen met random

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

denian

Legacy Member
hallo,
ik heb een oefening proberen te maken (geen huiswerk, gewoon een extra oefening die in de cursus stond) met array en random getallen (tussen 7 en 77)
nu heb'k ik zelf een programma geschreven, maar die random wil niet lukken, weet iemand hoe dit juist werkt?
een twee dimensionale array van gehele getallen

1ste rij heeft 3 kolommen
2de rij 2kolommen
en 3de rij 1kolom

declareer deze array in Java en schrijf een geneste for-lus om willekeurige getallen tussen 7 en 77 (random te genereren) in de array te plaatsen.

Code:
public class arrayTesten
{
        public static void main(String[] args)
        {
                int a[][] = new int[3][];
                a[0] = new int[3];
                a[1] = new int[2];
                a[2] = new int[1];
                int getal777;

                for (int rij = 0; rij < a.length; rij++)
                {
                        for (int kolom = 0; kolom < a[rij].length; kolom++)
                        {
                                getal777 = 7+ (int) (Math.random()*70);
                                a[rij][kolom] = getal777;
                                System.out.print(""+getal777+" ");
                        }
                        System.out.println();
                }
        }
}
nu had ik eerst ipv 70, 77 staan maar ik merkte al rap dat die tot boven 77 ging, nu heb'k het probleem dat het getal max 76 wordt en niet 77.
kan iemand mss uitleggen waarom of hoe dit juist werkt?
alvast bedankt

Yank

Legacy Member
Math (Java 2 Platform SE 5.0)
Die Math.Random() gaat nooit 1.0 teruggeven. Dus als je vermenigvuldigt met 70 zal het altijd max 69 zijn en + 7 erbij is dat max 76. Als je 77 ook in je array wilt, moet je die * 70 vervangen door * 71.

Persoonlijk gebruik ik trouwens meestal nextInt() (dan met je wel een instantie aanmaken van Random). Intern zal het wel hetzelfde doen, maar ik vind het wat duidelijker.

forloRn_

Legacy Member
Math.random() genereert een double in het halfopen interval [0, 1[. Vermits 1 er zelf niet bij zit, zal Math.random() * 70 nooit 70 kunnen worden, maar maximaal 69,999... Als je dat resultaat cast naar een int, heb je een maximale waarde van 69. Tel daar 7 bij en je bekomt 76 als bovengrens.

denian

Legacy Member
bedankt voor de uitleg maar nu wil het weer niet lukken :doh:
als er nog iemand naar volgende code wil kijken? nogthans zeg mijn boek met theorie als je bv. x = 1 +randomNumbers.nextInt(6);
x de waarde van 1 tot 6 kan hebben, maar nu heb ik in volgende code soms weer ergens in de 80 :confused:
Code:
import java.util.Random;

public class arrayTesten2
{
        public static void main(String[] args)
        {
                int a[][] = new int[3][];
                Random randomNumbers = new Random();
                
                a[0] = new int[3];
                a[1] = new int[2];
                a[2] = new int[1];
                int getal777;

                for (int rij = 0; rij < a.length; rij++)
                {
                        for (int kolom = 0; kolom < a[rij].length; kolom++)
                        {
                           getal777 = 7 + randomNumbers.nextInt(77);
                           a[rij][kolom] = getal777;
                           System.out.print(getal777+" ");
                        }
                        System.out.println();
                }
        }
}

EDIT: maarja dan zal ik anders maar 71 ipv 70 in de eerste code gerbuiken ;)
THX

Cycloon

Legacy Member
Toch logisch dat je soms 80 of meer hebt?

Code:
7 + randomNumbers.nextInt(77)

Het hoogste getal is dus 83 dat je kan krijgen. In 5.2% van de gevallen zal je dus 80 of meer krijgen.

Wil je onder de 80 blijven dan moet je dit gebruiken:

Code:
7 + randomNumbers.nextInt(73)

En wil je tussen de 7 en 77:

Code:
7 + randomNumbers.nextInt(70)

Eventueel 71 gebruiken als je ook 77 zelf wil hebben.

Timmos

Legacy Member
denian zei:
bedankt voor de uitleg maar nu wil het weer niet lukken :doh:
als er nog iemand naar volgende code wil kijken? nogthans zeg mijn boek met theorie als je bv. x = 1 +randomNumbers.nextInt(6);
x de waarde van 1 tot 6 kan hebben, maar nu heb ik in volgende code soms weer ergens in de 80 :confused:
Als
Code:
x = a + nextInt(b);
dan zal x liggen in het interval [a, a+b-1].

Wat snapt ge hier niet aan?

Stel uw interval is dus [7,77] dan hebt ge dus een stelsel
a = 7
a+b-1 = 77

Oplossen geeft
a = 7
b = 71

Om het even omslachtig op te lossen :p
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan