WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   java - dummiefrage über Math.random() (http://www.wcm.at/forum/showthread.php?t=48364)

RaistlinMajere 03.03.2002 19:18

@JosefS
 
vielen dank, deine tipps waren entscheidend:
erstens natürlich der fehler, daß ich nur zahlen von 0-14 generiert habe, jedoch von 0-15 abgefragt habe (soviel zur endlosschleife) und 2. noch

Code:

for(int i=0; i<vorhanden; i++)
macht natürlich mehr sinn, nicht grundsätzlich den gesamten arrayinhalt abzufragen, sondern nur jene felder, die bereits mit gewünschen werten belegt wurden, bringt viel performance.

obwohl diese nunmehr relativ flott läuft, fällt jemandem eine einfachere lösung ein, um ein array wie gewünscht mit randomwerten zu füllen?

vielen dank nochmal für alle antworten.

Sesa_Mina 03.03.2002 19:29

Ich schreib das hier mal als basic code her aber umsetzen sollt ja ganz ganz easy sein ;)
Code:

  dim array(15) as byte
  for x=0 to 15:array(x)=x:next
  for x=0 to 15
      y=int(rnd*16)
      z=int(rnd*16)
      a=array(y):array(y)=array(z):array(z)=a
  next

Damit hast mal ein geordnetes array in dem nachher 16 mal zwei der Werte vertauscht werden. Damit hast recht einfach und vor allem schnell ein durcheinandergewürfeltes array das nur gewünschte zahlen enthält und ausserdem keine doppelt. Somit sparst dir an haufen überprüfungen usw.

RaistlinMajere 03.03.2002 19:58

sorry
 
aber aus dem code werd ich nicht recht schlau, hatte nie was mit basic zu tun. :(

moorhahn 03.03.2002 20:03

zuerst wird das feld von 0 bis 15 angefüllt, in das feld 0 wird 0 geschrieben, in das 1. 1, ...... . dann werden die inhalte irgendwie durcheinandergewürfelt, aber es werden keine neuen zahlen mehr ins feld geschrieben.

RaistlinMajere 03.03.2002 20:07

das prinzip ist simpel und mir auch schon durch den kopf gegangen, nur hab ich keine ahnung, wie ich das durcheinanderwürfeln mit java anstelle.

moorhahn 03.03.2002 20:12

etwa so:
Code:

// zuerst das feld mit zahlen anfüllen

//durcheinanderwürfeln
int a,b,c
for (int i=0;i<15;i++) {
  a=(int)(Math.random()*16); 
  b=(int)(Math.random()*16); 

  // dreieckstausch
  c=feld(a);
  feld(a)=feld(b);
  feld(b)=c;
}


RaistlinMajere 03.03.2002 20:19

hmm
 
ok, das leuchtet ein, geht kein wert verloren und die werte werden zufällig miteinander vertauscht, umso mehr, je länger man die forschleife durchlaufen läßt.


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag