9 svar
122 visningar
Kvadratenskvadrat 195 – Fd. Medlem
Postad: 16 mar 2019 00:50

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:

Facit (gyazo)

Laguna 28435
Postad: 16 mar 2019 03:02

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"  

Kvadratenskvadrat 195 – Fd. Medlem
Postad: 16 mar 2019 10:31

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?

Laguna 28435
Postad: 16 mar 2019 10:43

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. 

Affe Jkpg 6630
Postad: 16 mar 2019 11:08

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å.....

Kvadratenskvadrat 195 – Fd. Medlem
Postad: 16 mar 2019 11:42

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 !

Laguna 28435
Postad: 16 mar 2019 11:51

while...do finns, men då får du förstås tänka annorlunda. Do... while passar logiken här ganska bra. 

Affe Jkpg 6630
Postad: 16 mar 2019 12:06

Sättet att skriva...
do {
"kodrader"}
while(villkor);

...ska illustrera att "villkor" prövas efter att "kodrader" har exekverats.

Kvadratenskvadrat 195 – Fd. Medlem
Postad: 16 mar 2019 13:09

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?

Affe Jkpg 6630
Postad: 16 mar 2019 14:01

Det går att lösa med annan kombination av for-/while-/ do while-loopar, men det blir nog inte lika elegant :-)

Svara Avbryt
Close