[Java] array vullen met 16 verschillende random getallen

Pagina: 1
Acties:
  • 425 views sinds 30-01-2008
  • Reageer

  • KnEuTeR
  • Registratie: Mei 2000
  • Laatst online: 24-02-2024

KnEuTeR

iedereen heeft een handelsmerk

Topicstarter
Zoals de topic titel al zegt, wil ik een array vullen met 16 verschillende random getallen van 0 tot 15 en die mogen dus maar 1 keer voorkomen.

daarvoor had ik deze code:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public void shuffle(){
        for(int i=0;i<16;){
        int t = (int)(Math.random()*16);
            if(inCur(t)==false){
                cur[i]=t;
                i++;
            }
        }
    }

    public boolean inCur(int t){
        boolean b=true;
        for(int i=0;i<16;i++){
            if(cur[i]==t){
                b=false;
                break;
            }
        }
        return b;
    }


maar daar komt elke keer 0, 0, 0, 0, 0, etc gewoon uit :?

ik ben er al 2 uur mee bezig ik word er helemaal gestoord van, ik snap het even helemaal niet meer.

Computers ain't that smart, Whatever man built could be taken apart


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 27-05 21:44

Robtimus

me Robtimus no like you

Waarom gebruik je niet java.util.Random??

Wat verder misschien een idee is: stop de ints 0-15 in een collection, en neem er steeds een random element uit. Hoe mag je zelf bepalen :P
(Daar heb ik zelf al een klasse voor geschreven binnen 10 minuten, dus moeilijk kan het niet zijn)

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Dat is logisch, je zegt namelijk bij incur default true, maak hier false van en als je bij de iteratie een gelijke waarde tegenkomt zet je ehm op false.

Kijk ook nog even naar je eerste iteratie, die gaat ook nog niet goed. (wat gebeurd er als de waarde al bestaat (incur = true))

If you are not wiping out you are nog pushing enough...


Verwijderd

IceManX schreef op 08 december 2003 @ 15:26:
...stop de ints 0-15 in een collection, en neem er steeds een random element uit. ...
Een beetje omslagtig :X


Word t wel gevult met een Random getalletjuh?
hebbie hem al gevolgd met je debugger (Cristal gokt van niet).

[ Voor 22% gewijzigd door Verwijderd op 08-12-2003 15:32 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

IceManX:
Waarom gebruik je niet java.util.Random??

Wat verder misschien een idee is: stop de ints 0-15 in een collection, en neem er steeds een random element uit. Hoe mag je zelf bepalen :P
(Daar heb ik zelf al een klasse voor geschreven binnen 10 minuten, dus moeilijk kan het niet zijn)
Sterker nog, gebruik de shuffle methode uit de Java Collections klasse.

http://java.sun.com/j2se/...List,%20java.util.Random)

[ Voor 7% gewijzigd door drm op 08-12-2003 15:31 . Reden: lastig, die urls 8)7 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Doe je random getal es x16.0 ?

  • The Bad Seed
  • Registratie: November 2001
  • Laatst online: 08:25

The Bad Seed

Chaotic since 1983

er zit iig een logicafout in dit stukje
code:
1
if(inCur(t)==false)


Wanneer inCur true teruggeeft kijkt ie of true==false, wat false oplevert; en wanneer inCur false teruggeeft kijkt ie of false==false, wat true oplevert.

Hail to the guardians of the watchtowers of the north


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 27-05 21:44

Robtimus

me Robtimus no like you

drm schreef op 08 december 2003 @ 15:30:
[...]
Sterker nog, gebruik de shuffle methode uit de Java Collections klasse.

http://java.sun.com/j2se/...List,%20java.util.Random)
Ach ja, dat kan ook he? Ik ken de Collections klasse nog niet echt goed, nog niet echt gebruikt. Toch maar es mee beginnen :)

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dat vindt ik nog wel meevallen. Ik vindt het netter dan gewoon telkens random getallen blijven pakken en controleren of hij al in de huidige array zit.
Stel je hebt een array met 1.000.000 elementen. Je hebt al 999.999 elementen gevuld. Het kan natuurlijk nogal even duren voordat je het laatste niet gebruikte nummer hebt gevonden.
Met 16 elementen geld natuurlijk hetzelfde verhaaltje. Bij 16 elementen zal hij nog wel snel een antwoord vinden, maar het lijkt me toch een stuk efficienter om het in een collection te doen en dan random een element eruit te halen( en dus ook verwijderen zodat je hem niet nog een keer kunt kiezen ).
Natuurlijk is gebruik van de Shuffle method nog makkelijker.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • KnEuTeR
  • Registratie: Mei 2000
  • Laatst online: 24-02-2024

KnEuTeR

iedereen heeft een handelsmerk

Topicstarter
sorry dat ik zo laat reageer maar ik had even geen tijd :+

ik snap het gebruik van die shuffle() methode niet helemaal, ik krijg dr geen waardes in, als ik zo'n List aanmaak dan snapt ie het niet (wel die libary geimport)

Computers ain't that smart, Whatever man built could be taken apart


  • momania
  • Registratie: Mei 2000
  • Laatst online: 13:28

momania

iPhone 30! Bam!

Even heel simpel:

Math.random() geeft een double tussen de 0.0 en 1.0.
Dus als je die vermenigvuldigd met een waarde krijg je een random tussen 0 en die waarde.

Dit geeft je dus 10 getallen tussen de 0 en de 100:
Java:
1
2
3
4
    for (int i=0; i<10; i++) {
        int x = (int)(Math.random() * 100);
        System.out.println("X: "+x);
    }   


[edit]

En voor wat jij wilt, een lijst van 0-15 en die door elkaar:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    // lijst vullen van 0 tot 15
    java.util.List l = new java.util.LinkedList();
    for (int i=0; i<15; i++) {
        l.add(new Integer(i));
    }

    // schud zooitje door elkaar
    java.util.Collections.shuffle(l);

    // laat uitkomst zien
    java.util.Iterator iter = l.iterator();
    while (iter.hasNext()) {
        System.out.println("X: "+iter.next().toString());
    }   


Kijk zelf nog even wat je allemaal nog meer kan met java.util.Collections. Je zal versteld zijn, wat er standaard al beschikbaar is en waar je dus niet zelf iets voor hoeft te schrijven ;)

[ Voor 49% gewijzigd door momania op 17-12-2003 16:57 ]

Neem je whisky mee, is het te weinig... *zucht*


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

edit:
:w momania :P
KnEuTeR:
ik snap het gebruik van die shuffle() methode niet helemaal, ik krijg dr geen waardes in, als ik zo'n List aanmaak dan snapt ie het niet (wel die libary geimport)
Nee, dat is ook logisch, een List is een interface, daar kun je geen instanties van aanmaken. Je zult een implementatie van de List interface moeten gebruiken, bijvoorbeeld ArrayList, LinkedList of Vector.

voorbeeldje:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.*;

public class ShuffleTest {
   private ArrayList list;

   public ShuffleTest () {
      list = new ArrayList ();
   }

   public void go () {
      for ( int i = 0; i < 10; i ++ ) {
         list.add ( new Integer (i) );
      }
      Collections.shuffle ( list, new Random () );

      ListIterator iterator = list.listIterator ();
      while ( iterator.hasNext () ) {
         System.out.println ( iterator.next () );
      }
   }

   public static void main ( String args[] ) {
      ShuffleTest app = new ShuffleTest ();
      app.go ();
   }
}

[ Voor 15% gewijzigd door drm op 17-12-2003 17:00 . Reden: quote dus :z ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

Geven we tegenwoordig altijd kant-en-klare oplossingen :?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • momania
  • Registratie: Mei 2000
  • Laatst online: 13:28

momania

iPhone 30! Bam!

.oisyn schreef op 17 december 2003 @ 17:03:
Geven we tegenwoordig altijd kant-en-klare oplossingen :?
offtopic:
Sorry, kon het niet laten :*
Hopelijk leert de TS er iets van en gaat hij zich verdiepen in de Collection Framework :)

Neem je whisky mee, is het te weinig... *zucht*


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Als je met integers zit, dan zou ik nu met 1.4 nog niet voor een lijst gaan, daar Integer Objecten instoppen, laten shuffelen en dan weer int's eruit halen. Dat kost je het aanmaken van n +2 (list en Random) objecten, wat wat duur is imho :)

Kijk gewoon in de source van Collections.shuffle en je bent klaar
Java:
1
2
3
Random l_shuffleRandom = new Random();
for (int i=source.length; i>1; i--)
                swap(source, i-1, l_shuffleRandom.nextInt(i));

en klaar ben je. Scheelt je een hoop gewrap.

drm
Gebruik liever de interfaces voor de declaraties, dan zit je generieker, dus
Java:
1
2
List l_randomList = new ArrayList();
Iterator l_iter = new Iterator();
Verder scheelt het meegeven van een Random object je weer het aanmaken van zo'n kreng, aangezien Collections er één static heeft staan.
Pagina: 1