Permalänk
Medlem

slumpa 10 tal

så ja är ny på java och fick en uppgift där jag skulle slumpa 10 tal som var mellan storleken 0 och 10.
jag lyckades med 1 tal men hur får jag fram 10 st?

här är min kod:

int min = 0;
int max = 9;

int i = (int) (Math.random() * max - min);

System.out.println("Slumptalet blev: " + i);

Permalänk
Medlem

en for loop

Visa signatur

i9 12900k, RTX3080, 3600MHz CL15 DDR4 , custom loop

Permalänk
Medlem

int min = 0; int max = 9; for (int i = 0; i < 10; i++) { int n = (int) (Math.random() * max - min); System.out.println("Slumptalet blev: " + n); }

Fråga om du undrar över något!

Permalänk
Medlem
Skrivet av Qwiko:

int min = 0; int max = 9; for (int i = 0; i < 10; i++) { int n = (int) (Math.random() * max - min); System.out.println("Slumptalet blev: " + n); }

Fråga om du undrar över något!

tack!
en liten grej, varför skrev du i++
om jag inte är ute och cyklar betyder väl det i+1? vad har det med saken att göra??

edit: jag fattar det betyder att den först kör en gång sen en gång till (i++) osv??
hahah hittade en sak till raden "System.out.println("Slumptalet blev: " + n);" används ju men texten "slumptalet blev" skrivs ju inte ut någonstans, varför?

Permalänk
Medlem

Det betyder i = i +1 precis, bara ett lättare sätt att skriva det.

Efter en körd runda i loopen så blir i 1 större och gör så att loopen inte kör i all evighet

Vad använder du för programmeringsmiljö? Kör du i textdokument så borde du öppna javafilen via någon kommandoprompt eller om du använder eclipse/netbeans eller liknande finns det en konsol du kan kolla i

Jag använder eclipse när jag programmerar. Då ser det ut ungefär såhär:

Permalänk
Medlem
Skrivet av bramble:

tack!
en liten grej, varför skrev du i++
om jag inte är ute och cyklar betyder väl det i+1? vad har det med saken att göra??

edit: jag fattar det betyder att den först kör en gång sen en gång till (i++) osv??
hahah hittade en sak till raden "System.out.println("Slumptalet blev: " + n);" används ju men texten "slumptalet blev" skrivs ju inte ut någonstans, varför?

Precis som du säger är i++ att likställa med i = i+1 eller i += 1. Det är ett lite mer kompakt sätt att skriva på bara, där increment-operatorn (++) används. For-loopen kommer att köras så länge som i är mindre än 10. Efter att vi trösklat igenom all kod som står innuti loopen ökar vi i med 1 (därav i++). På så sätt kommer loopen att köras 10 gånger.

Varv 1: i=0
Varv 2: i=1
Varv 3: i=2
Varv 4: i=3
Varv 5: i=4
Varv 6: i=5
Varv 7: i=6
Varv 8: i=7
Varv 9: i=8
Varv 10: i=9

Efter varv 10 lägger vi återigen på 1 på i, så i varv 11 blir det så att i=10. Eftersom att 10 inte än mindre än 10 kommer villkoret för att loopen skall köras att vara falskt (vilket innebär att loopen inte kommer att köras en elfte gång). Så for-loopens uppbyggnad är i det här fallet:

for(skapa variabeln i och tilldela den värdet 0; villkor för att loopen skall köras; öka i med 1 efter varje körning){ }

Visa signatur

Citera för svar!

Stationär: Fractal Design Define R6 | Asus Z370-P | Intel i7 8700k @ 3.7 Ghz | Corsair Vengeance LPX 32GB CL15 @ 3000 Mhz | Asus STRIX GTX960 4GB | Fractal Design Celsius S24 | 5 TB HDD | 250GB SSD (Samsung 850 EVO), 128GB SSD (Crucial M4) | Corsair HX 850W | W10
Bärbar: Sony Vaio Pro 13.3" | i7-4500U | 8GB RAM | 256GB SSD | Ubuntu

Permalänk
Medlem
Skrivet av Qwiko:

Det betyder i = i +1 precis, bara ett lättare sätt att skriva det.

Efter en körd runda i loopen så blir i 1 större och gör så att loopen inte kör i all evighet

Vad använder du för programmeringsmiljö? Kör du i textdokument så borde du öppna javafilen via någon kommandoprompt eller om du använder eclipse/netbeans eller liknande finns det en konsol du kan kolla i

Jag använder eclipse när jag programmerar. Då ser det ut ungefär såhär:
http://i.imgur.com/vl6kUfT.png

Använder netbeans och ser nästintill likadant ut.

Permalänk
99:e percentilen
Skrivet av Qwiko:

int min = 0; int max = 9; for (int i = 0; i < 10; i++) { int n = (int) (Math.random() * max - min); System.out.println("Slumptalet blev: " + n); }

Nu kanske jag bara är seg här, men anta att min == 8. Då blir det fetmarkerade uttrycket (Math.random() * 9 - 8), vilket väl alltid kommer hamna i intervallet [–7, 0]?

Gjorde ett litet testprogram som verkar verifiera min teori.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem
Skrivet av Alling:

Nu kanske jag bara är seg här, men anta att min == 8. Då blir det fetmarkerade uttrycket (Math.random() * 9 - 8), vilket väl alltid kommer hamna i intervallet [–7, 0]?

Gjorde ett litet testprogram som verkar verifiera min teori.

Tänkte inte så mycket utan kopierade över från hans kod direkt

Det rätta är att inte ta - min utan + min men det gör ingen skillnad om man har - 0.
Om jag skulle skrivit det så hade jag kanske tänkt mig något som
Math.random() * max + min; om int min = 1; int max = 10;

Då blir de slumpade talet 1 <= x <= 10

Exempel http://ideone.com/vJOFpQ

Permalänk
Hedersmedlem
Skrivet av Qwiko:

Math.random() * max + min; om int min = 1; int max = 10;

Då blir de slumpade talet 1 <= x <= 10

Om `Math.random()` ger tal mellan 0 och 1 så ger ovanstående kod som lägst 0 ⋅ max + min = min, dvs en lägre gräns på min vilket är rätt i den änden.

Övre gränsen blir ju dock 1 ⋅ max + min = max + min, vilket inte är rätt. Det ska ju bara vara max.

Exempelvis `Math.random()` ⋅ (max − min) + min ger däremot som minst min och som mest max− min + min = max, med linjär skalning däremellan.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Permalänk
Medlem
Skrivet av phz:

Om `Math.random()` ger tal mellan 0 och 1 så ger ovanstående kod som lägst 0 ⋅ max + min = min, dvs en lägre gräns på min vilket är rätt i den änden.

Övre gränsen blir ju dock 1 ⋅ max + min = max + min, vilket inte är rätt. Det ska ju bara vara max.

Exempelvis `Math.random()` ⋅ (max − min) + min ger däremot som minst min och som mest max− min + min = max, med linjär skalning däremellan.

min betyder egentligen bottenvärdet och det det börjar på. Så variabelnamnen är inte helt korrekt heller.
Därför blir max = 1 * max + min och min = 0 * max + min

Permalänk
Medlem

Math.random spottar ur sig tal [0, 1). Omcastning till int kommer bara klippa decimalerna.

Permalänk
Hedersmedlem
Skrivet av Qwiko:

min betyder egentligen bottenvärdet och det det börjar på. Så variabelnamnen är inte helt korrekt heller.
Därför blir max = 1 * max + min och min = 0 * max + min

min blir korrekt, men ditt max skulle i så fall snarare betyda "intervallängd utöver min", vilket är oväntat.

Om man ger min = 3 och max = 5 så ger din metod ett tal mellan 3 och 8. Snarare borde man förvänta sig ett tal mellan min och max, dvs mellan 3 och 5.

Skrivet av Motherofgod:

Math.random spottar ur sig tal [0, 1). Omcastning till int kommer bara klippa decimalerna.

Jo, trådskaparen kommer behöva fundera på kravspecifikationen lite mer när väl loopen fungerar. "Tal mellan 0 och 10" lämnar en del osagt — hel- eller flyttal? Inklusive eller exklusiva respektive intervallgräns? Trådstarten sätter minimum till 0 och maximum till 9 innan de kastas om till heltal (även om intervallberäkningen inte heller håller generellt enligt trådens diskussion), vilket troligen kräver mer eftertanke.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.