1. #1
    denian's Avatar
    Registered
    28/10/09
    Location
    Denderleeuw
    Posts
    11
    iTrader
    0
    Mentioned
    0 Post(s)

    java array opvullen met random

    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
    no votes  

  2. #2

    Registered
    04/11/03
    Location
    Brugge
    Posts
    13,390
    iTrader
    16 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/18
    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.
    Fractal Design Node 304 || Asus H87I-PLUS || Intel i5 4570 || 16GB DDR3 || EVGA 1080 Ti SC Black Edition ||Samsung 840 EVO 250GB || Dell U3818DW
    Fractal Design Define XL || Gigabyte 790X-UD3P || AMD Phenom II X4 955 || 4GB DDR2 || HD4850 || 20TB
    no votes  

  3. #3
    forloRn_'s Avatar
    Registered
    23/11/03
    Location
    Landeurp
    Posts
    1,791
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    10/17
    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.
    no votes  

  4. #4
    denian's Avatar
    Registered
    28/10/09
    Location
    Denderleeuw
    Posts
    11
    iTrader
    0
    Mentioned
    0 Post(s)
    bedankt voor de uitleg maar nu wil het weer niet lukken
    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
    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
    no votes  

  5. #5
    Cycloon's Avatar
    Registered
    18/01/04
    Location
    Melle
    Posts
    10,535
    iTrader
    56 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/102
    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.
    Last edited by Cycloon; 21-01-2010 at 14:45.
    “In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
    PSN: Cycloon - Final Fantasy XIV: A realm reborn character
    no votes  

  6. #6
    Timmos's Avatar
    Registered
    10/11/03
    Location
    Gent
    Posts
    6,158
    iTrader
    41 (100%)
    Mentioned
    0 Post(s)
    Reputation
    1/121
    Quote Originally Posted by denian View Post
    This quote is hidden because you are ignoring this member. Show
    bedankt voor de uitleg maar nu wil het weer niet lukken
    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
    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
    no votes  

  7. #7
    denian's Avatar
    Registered
    28/10/09
    Location
    Denderleeuw
    Posts
    11
    iTrader
    0
    Mentioned
    0 Post(s)
    ok nu snap ik het
    heel erg bedankt
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in