Knutgrus Skrevet 23. mars 2006 Del Skrevet 23. mars 2006 For eksempel en lotto-trekknign... Får ikke dette til å funke. Er jo en rimelig enkel oppgave, men jeg får det bare ikke til. Poenget her er at den ført gir en verdi til rekka[0] (før løkka starter) gir så en verdi til rekka[1], og sjekker om den er lik rekka[0]. (Det første programmet gjør er å gi alle elementene i arrayen verdien 0.) for (i=1; i<7; i++) { rekka[i] = (int) (33 * Math.random())+1; for (j=0; j<7; j++) { if (rekka[i] == rekka[j] && rekka[j] > 0) { rekka[i] = (int) (33 * Math.random())+1; } } } Lenke til kommentar
Mr.Garibaldi Skrevet 23. mars 2006 Del Skrevet 23. mars 2006 Er dessverre noget på druen akkurat nå, men mener å huske at du først må opprette et objekt av Math.random(long seed), og så kalle objektets .nextInt i ditt tilfelle for å oppnå ønsket effekt. Du finner nærmere informasjon her... Kort sagt er poenget at du trenger å opprette et random objekt, og så kallet dets .nextInt() funksjon, så skulle alt fungere som du forventer. Lenke til kommentar
Mr.Garibaldi Skrevet 24. mars 2006 Del Skrevet 24. mars 2006 Etter å ha tatt en litt nærmere titt, så ser jeg ikke noen feil i sammenligningskoden, men som jeg påpekte tidligere, du genererer samme tallet slike du gjør det nå. Denne kodesnutten genererer forskjellige tall (dog noen like grunnet for lite mellomrom mellom hvert kall til nextInt()), og sjekker om de er like. Hvis ja, så genereres et nytt tall. int rekka[] = new int[7]; Random tilfeldig = new Random(); for (int i=1; i<7; i++) { rekka[i] = tilfeldig.nextInt(); for (int j=0; j<7; j++) { if (rekka[i] == rekka[j] && rekka[j] > 0) { System.out.println("Ja, var likt for " + i + "og verdien er: " + rekka[i]); rekka[i] = tilfeldig.nextInt(); } } } Men jeg ville nok heller anbefale deg å splitte ut random genereringen til en egen metode, og lage en egen metode til å sjekke at det ikke er noen like tall. For slik det er nå, så kan det godt hende at du ender opp med to like tall (siden det ikke er en sjekk på det nye tallet som genereres). Lenke til kommentar
oyvind_b Skrevet 24. mars 2006 Del Skrevet 24. mars 2006 Det jeg pleier å gjøre er som Garibaldi: splitte ut tall-utvelgelsen i en egen klasse: (Koden er bare tatt fra hodet og ikke testet) public class RandomNumber { private ArrayList numbers; public RandomNumber(int min, int max) { numbers = new ArrayList(max - min + 1); for (int i = min; i <= max; i++) { numbers.add(new Integer(i)); } } public int getNextRandomNumber() { if (numbers.size() == 0) return -1; // eller noe annet her int index = (int) ((numbers.size() - 1) * Math.random() + 1; int number = ((Integer)numbers.get(index)).intValue(); numbers.remove(index); return number; } } ... RandomNumber rnd = new RandomNumber(1, 34); for (int i = 0; i < 7; i++) { System.out.println(rnd.getNextRandomNumber()); } Øyvind Lenke til kommentar
Knutgrus Skrevet 25. mars 2006 Forfatter Del Skrevet 25. mars 2006 Ok. takker for svar. Jeg tror jeg har misforstått dette med programering... Det jeg trodde koden min gjorde var å trekke et tilfeldig tall. Så trekker programmet et nytt tilfeldig tall, og sjekker om det er likt det første. Om det er likt, trekker det et nytt igjen... Men men. Med denne "nextInt()" 'en, så trengs vel ikke det... Lenke til kommentar
Mr.Garibaldi Skrevet 25. mars 2006 Del Skrevet 25. mars 2006 Tror koden din kan fungere, med et par endringer. int i, j; rekka[0] = (int) (33 * Math.random())+1; //start: for (i=1; i<7; i++) { rekka[i] = (int) (33 * Math.random())+1; for (j=0; j<7; j++) { if(i != j){ if (rekka[i] == rekka[j] && rekka[j] > 0) { rekka[i] = (int) (33 * Math.random())+1; // goto start; } } } } Eneste endringen er at den sjekker at i ikke er lik j, da du ellers alltid vil ende opp med å generere nye tall når i == 0. Den vil fortsatt kunne gi deg flere like tall, siden du bare sjekker en gang om det finnes like tall i listen... Så jeg vil fortsatt råde deg til å splitte ut genereringen og sjekkingen. Bare endre metoden hvor du setter alle feltene til 0 til å generere tall i stedet, og sjekk så etterpå. Da kan du bruke den utkommenterte goto'en, eller finne en annen løsning, uten problemer. Du kan lese hvordan nextInt() fungerer her. Men du må passe på at du ikke kaller metoden for raskt, da den da vil generere like tall. (Det gjelder alle slike random generatorer) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå