BlackBoard » Design, Programmierung & Entwicklung » Programmieren » Java Array mischen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Array mischen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Zmaster
Junior Member


Dabei seit: 15.02.2003
Beiträge: 133

Fragezeichen Array mischen       Zum Anfang der Seite springen

16.05.2004 22:42 Zmaster ist offline Beiträge von Zmaster suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

in c++ gibts randomshuffle, aber keine
Ahnung wie man das in Java macht.

Devil

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
16.05.2004 23:20 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Nightwolf Nightwolf ist männlich
BlackBoarder


images/avatars/avatar-2263.jpg

Dabei seit: 17.07.2003
Beiträge: 856
Herkunft: Hessen

      Zum Anfang der Seite springen

du koenntest das mit if und Math.random machen

__________________
Wir ertrinken in Informationen und hungern nach Wissen. - John Naisbitt
16.05.2004 23:29 Nightwolf ist offline E-Mail an Nightwolf senden Beiträge von Nightwolf suchen
Zmaster
Junior Member


Dabei seit: 15.02.2003
Beiträge: 133

Themenstarter Thema begonnen von Zmaster
      Zum Anfang der Seite springen

Ich kann doch nicht mit Random die Reihenfolge bestimmen lassen.
Da kommen doch dann irgendwann Elemente doppelt vor, bzw. er lässt welche weg. Und dann mit if zu kontrollieren, welche fehlen und welche noch ergänzt werden, scheint mir nicht sehr sinnvoll.
Ich merke schon, ich muss mir wirklich eine shuffle Funktion schreiben. Trotz erfolgloser Suche mit Google, habe ich die Hoffnung nicht aufgegeben, dass schon eine entsprechende Funktion gibt.

Ok, wie erstelle ich mit einer Funktion eine Liste mit n Elementen in zufälliger Reihenfolge? Ich glaube, jetzt sind Mathematiker mit Fähigkeiten in der Komplexität gefragt (ich sag nur Mandelbrot).

Gruß
zmaster
16.05.2004 23:55 Zmaster ist offline Beiträge von Zmaster suchen
Medusa Medusa ist männlich
Senior Member


images/avatars/avatar-252.gif

Dabei seit: 10.09.2001
Beiträge: 356
Herkunft: ...von da, wo mein Haus wohnt...

      Zum Anfang der Seite springen

wenn du nicht prüfen willst, welche elemente schon vorhanden sind, dann versuch doch ein paar mal (zufällig oft) 2 zufällige elemente miteinander zu tauschen.

ich kann leider kein java. Aber die syntax is ja mal wurscht:

n sei letzte element,
rand ist ne zufahlszall (math.rand()) zwischen 0 und 1, jedes mal anders,
a sei das array

code:
1:
2:
3:
4:
5:
6:
7:
8:
j=runden(rand*20)
for (i=0; i<j; i++) {
    x=runden(rand*n)
    y=runden(rand*n)
    tmpX=a[x]
    a[x]=a[y]
    a[y]=tmpX    
}


runden() soll die Zahl auf eine Ganzzahl runden. Einfach ersetzen durch math.round() oder int() oder floor() oder weiß der Geier großes Grinsen

Ich weiß net wie des mit den Zufallszahlen aussieht. Wenn 2x direkt hintereinander eine Zufallszahl (abhängig von der Zeit) generiert wird, bin ich mir net sicher, ob die dann so zufällig sind. Einfach mal testen.

__________________
Grüßle, Medi

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Medusa: 17.05.2004 22:34.

17.05.2004 22:30 Medusa ist offline E-Mail an Medusa senden Beiträge von Medusa suchen
Zmaster
Junior Member


Dabei seit: 15.02.2003
Beiträge: 133

Themenstarter Thema begonnen von Zmaster
      Zum Anfang der Seite springen

Endlich mal ein vernünftiger Vorschlag!

Auf diese Idee bin ich selber auch nicht gekommen, sondern hat mich jemand gebracht. Ich nehme auch an, dass intern so die shuffle-Funktionen arbeiten. Allerdings würde ich mir auch Sorgen machen über die zwei direkt hintereinander erzeugten Zufallszahlen. Desto langsamer der Computer ist, desto besser arbeitet vielleicht die Funktion Augenzwinkern

Meine Lösung sieht inzwischen anders aus. Ich habe mein Array in eine Liste umkonvertiert und diese kann mit shuffle gemischt werden.
Und danach habe ich die Liste in ein Array (über dem Umweg des Objects) zurück konvertieren.
Das ist die Lösung, die ich genommen habe, weil ich mir dann sicher sein kann, dass es dann halbwegs gut gemischt ist.

Gruß
zmaster
18.05.2004 10:30 Zmaster ist offline Beiträge von Zmaster suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Ein Randomizer spuckt zwar nur Pseudozufallszahlen aus, die nach einem Algorithmus bestimmt werden, allerdings kannst du schon davon ausgehen, dass in aufeinanderfolgenden Zeiteinheiten nicht aufeinanderfolgende Zufallszahlen erzeugt werden. Die Zufalls-Algorithmen setzen auf ein Höchstmaß an Konfusion in der Berechnung der Zahlen.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

18.05.2004 12:01 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
Romanticus Romanticus ist männlich
Member


images/avatars/avatar-1944.jpg

Dabei seit: 08.03.2003
Beiträge: 280
Herkunft: ein Land, das in Deutschland nur wenige kennen

      Zum Anfang der Seite springen

noch so ein blöder vorschlag, wie man ein array mischen könnte Augenzwinkern - die idee hatte ich gestern vor dem einschlafen, so ne art geistesblitz smile .

da ich mit der java-syntax noch nicht sehr gut vertraut bin, und keine lust hab nachzuschauen, beschreibe ich einfach mal die vorgansweise.

man geht jedes element des arrays mit einer schleife durch. für jedes element wird eine zufallszahl zwischen 1 und n (100, 1000 etc.) generiert. wenn die zufallszahl gerade ist, wird das element an den anfang eines temporären arrays geschrieben, und wenn nicht - ans ende. zum schluss wird das ursprungsarray durch das temporäre ersetzt.
so wie ich das sehe, ist die methode recht "zufällig", bloß bin ich mir nicht ganz im klaren ob der "zufälligkeitsfaktor" proportional zur anzahl der potenziellen möglichkeiten wächst. Die wahrscheinlichkeit, dass eine gerade zahl generiert wird, ist ja unabhängig von n immer 50%. Andersrum, wenn n0=1 und n=2, dann ist die absolute wahrscheinlichkeit immer noch 50%, aber die relative um ein vielfaches höher (oder nicht?), das heißt, bei zwei zahlen ist die wahrscheinlichkeit größer, dass eine und diesselbe zahl mehrmals nacheinader kommt. Das ist zwar immer noch zufallsbasiert, erscheint uns aber logisch, da die möglichkeiten radikal geschrumpft sind.
Das könnte eine interessante diskussion geben smile

P.S. Ich weiß nicht ob es in Java fertige funktionen gibt, um elemente ans ende bzw. anfang des array hinzuzufügen. Schau mal in der docu nach dem paket java.lang.reflect das unter anderem die Klasse zur array-bearbeitung umfasst.

__________________
Heute sterben die meisten Leute an einer Art schleichenden Menschenverstandes und entdecken zu spät, dass das Einzige, was wir nie bereuen, unsere Fehler sind. Oscar Wilde

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Romanticus: 18.05.2004 13:53.

18.05.2004 13:50 Romanticus ist offline E-Mail an Romanticus senden Homepage von Romanticus Beiträge von Romanticus suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

      Zum Anfang der Seite springen

Diese Methode ist aber IMHO net all zu zufällig, da du ja die Array-Elemente der Reihe nach durchgehst und nur einige herauspickst und sie an den Anfang schiebst. Die Elemente am Anfang sind dann aber immer noch mehr oder weniger absteigend sortiert.

Hier ist BTW eine Seite, die sich mit diesem Array-Misch-Problem beschäftigt.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

18.05.2004 13:58 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
Romanticus Romanticus ist männlich
Member


images/avatars/avatar-1944.jpg

Dabei seit: 08.03.2003
Beiträge: 280
Herkunft: ein Land, das in Deutschland nur wenige kennen

      Zum Anfang der Seite springen

shit... stimmt... das hab ich übersehen... bis zum ersten element des ursprungsarrays gehts absteigend und danach wieder aufsteigend... naja.. dann muss ich mir was anderes einfallen lassen smile

__________________
Heute sterben die meisten Leute an einer Art schleichenden Menschenverstandes und entdecken zu spät, dass das Einzige, was wir nie bereuen, unsere Fehler sind. Oscar Wilde
18.05.2004 14:34 Romanticus ist offline E-Mail an Romanticus senden Homepage von Romanticus Beiträge von Romanticus suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Mal ein entwurf:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
init_random() // zufallszahlen durch zb. Zeit intialisieren

for(int i =0; i < array_laenge * durchläufe; i++)
{
int x rand()%array_laenge -1;
int y rand()%array_laenge -1;
tausche(array[x],array[y]);
} 


So müsstest du das dann ungefähr machen.
Ist zwar nicht sehr performant, mixt aber das array
ordenlich durch.

Devil

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
18.05.2004 14:43 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » Java Array mischen

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH