Thread: java array opvullen met random
-
21-01-2010, 13:40 #1
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.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.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(); } } }
kan iemand mss uitleggen waarom of hoe dit juist werkt?
alvast bedanktno votes
-
-
21-01-2010, 13:47 #2Member
- 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
-
21-01-2010, 13:49 #3Member
- 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
-
21-01-2010, 14:18 #4
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
EDIT: maarja dan zal ik anders maar 71 ipv 70 in de eerste code gerbuikenCode: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(); } } }
THXno votes
-
21-01-2010, 14:26 #5Approved 9liver
- 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?
Het hoogste getal is dus 83 dat je kan krijgen. In 5.2% van de gevallen zal je dus 80 of meer krijgen.Code:7 + randomNumbers.nextInt(77)
Wil je onder de 80 blijven dan moet je dit gebruiken:
En wil je tussen de 7 en 77:Code:7 + randomNumbers.nextInt(73)
Eventueel 71 gebruiken als je ook 77 zelf wil hebben.Code:7 + randomNumbers.nextInt(70)
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 characterno votes
-
21-01-2010, 14:37 #6Approved 9liver
- Registered
- 10/11/03
- Location
- Gent
- Posts
- 6,158
- iTrader
- 41 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/121
Als
dan zal x liggen in het interval [a, a+b-1].Code:x = a + nextInt(b);
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
-
21-01-2010, 14:52 #7
ok nu snap ik het
heel erg bedankt
no votes


