Random rand i en vektor
https://gyazo.com/6b288752fbe045784b70b3a58dfe043d
Har fastnat på ovanstående fråga.
Jag tänkte ganska likt som facit. Men har fastnat på några viktiga koncept!
I do-while-loopen är så fallet att man testar fram till att rand numret faktiskt finns? Varför väljer man integer max value? hade följande kod funkat om man valt 1 miljon eller 101-tusen eller 100-tusen? Och vad händer om den först väljer tal nummer 1 och sen nästa gång tal nummer 1 då bryts ju while-loopen, hur klarar koden att fortsätta och fylla resterande 99999 platser? Det fattar jag inte riktigt!
Facit är i nedanstående länk:
Maxint har man bara valt. 1000000 hade också fungerat, men 100000 skulle ta enormt lång tid, för att på slutet kommer man att ha sett de flesta talen redan, och till sist är det ett enda tal man vill ha.
Det du undrar om att "while-loopen bryts" förstår jag inte, och inte heller vad du menar med "till att randnumret faktiskt finns"
Tack för det där första!
https://gyazo.com/8db7a0e6644eb5a5d2155d0feaf9a976
Såhär tolkar jag koden.
Jag måste tolka fel. För enligt mni tolkning börjar vi med randnbr = 0. Sen så hittar vi ett nytt rand nbr, som loopas om och om igen enda tills vi hittar ett randnbr som "containas" och då bryts loopen och det numret läggs till. Det betyder att vi skulle fylla alla 100k platser med nollor. Vilket är 100% en feltolkning.
Hur ska jag tolka koden?
Det står "do ... while contains", dvs man snurrar där tills man hittar ett tal som inte ingår. Att den alltid sätts till 0 först har ingen betydelse.
Initieringen...
int randNbr = 0;
...tycks vilseleda dig, eftersom initieringen inte behövs.
Första och nästkommande värden på randNbr slumpas ju i satsen:
randNbr = rand.nextInt(….)
Man prövar om slumpade värden på randNbr var slumpade tidigare med:
created.contains(randNbr)
Var värdet på randNbr inte slumpat tidigare så.....
Kan man göra om do while på något annat sätt? tror det är den som förvirrar mig. Då jag trodde den gjorde exakt tvärt om !
while...do finns, men då får du förstås tänka annorlunda. Do... while passar logiken här ganska bra.
Sättet att skriva...
do {
"kodrader"}
while(villkor);
...ska illustrera att "villkor" prövas efter att "kodrader" har exekverats.
AH okej tror jag förstår lite. Finns det något sätt att lösa den uppgift med bara en/två foorloop eller whileloopar?
Det går att lösa med annan kombination av for-/while-/ do while-loopar, men det blir nog inte lika elegant :-)