ubuntuusers.de

Array in Java "mischen"

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Osiris86

Avatar von Osiris86

Anmeldungsdatum:
18. September 2007

Beiträge: 69

moin,
ich hab ein String Array mit ca. 52 Element und möchte diese Elemente durch mischen...
hätte jmd eine Idee oder Lösung für mein Problem
danke ich voraus

DimonVS

Anmeldungsdatum:
1. August 2007

Beiträge: 19

Wohnort: Schwarzwald

nimm halt 2 Integer, z.B. x und y, die mit Zufallswerten belegen, die natuerlich im Bereich liegen (also 0 bis 51 bei 52 Elementen), Und dann einfach inhalte tauschen , also temp = array[x]; array[x] = array[y]; array[y] = temp; und das wird in einer Schleife 100 mal wiederhollt.

Vielleicht gibts ne bessere Loesung.

Osiris86

(Themenstarter)
Avatar von Osiris86

Anmeldungsdatum:
18. September 2007

Beiträge: 69

hab ich mir auch schon gedacht, aber kann man das nicht einfacher über Math.random() oder über die klasse Random() lösen?

DimonVS

Anmeldungsdatum:
1. August 2007

Beiträge: 19

Wohnort: Schwarzwald

Random wirst du ja fuer die zwei Zufallszshlen brauchen...

Osiris86

(Themenstarter)
Avatar von Osiris86

Anmeldungsdatum:
18. September 2007

Beiträge: 69

ja das ist mir klar... aber das ich direkt das array mischen kann! oder denk ich wieder zu einfach für java?

DimonVS

Anmeldungsdatum:
1. August 2007

Beiträge: 19

Wohnort: Schwarzwald

Ich hab hier leider kein Java, schau mal, java.util.Collections.shuffle() ob du mit dem Zeug was anfangen kannst.

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

Zufallszahlen mit java.util.Random erzeugen.

Als Beispiel ein Array mit 32 Elementen. Du fängst mit dem Element an Position 0 an und vertauscht es mit einem Element an einer zufälligen Position von 0 bis 31 .

Anschließend nimmst Du das Element an Position 1 und vertauscht es mit einem Element an einer zufälligen Positon 1 bis 31. u.s.w.
Am Ende ist das gesamte Array gemischt. Jede mögliche Anordnung ist gleich wahrscheinlich.

So könnten die Methoden aussehen:
// der Zufallsgenerator
private static java.util.Random rz = new java.util.Random();

// vertauschen
private static void swap(Object[] x, int a, int b) {
Object t = x[a]; x[a] = x; x = t;
} //Array mischen
public static void shuffle(Object[] x) {
for(int i = x.length; i > 1; i--) swap(x, i-1, rz.nextInt(i));
} Hab ich selbst mal nach einem Forumbeitrag abgeschrieben, weiss aber nicht mehr welches es war. Hat bei mir funktioniert

Osiris86

(Themenstarter)
Avatar von Osiris86

Anmeldungsdatum:
18. September 2007

Beiträge: 69

alles klar danke, ich schau mal rein!

p.s. is ja wie ein live-chat hier 😉

BadBoy

Avatar von BadBoy

Anmeldungsdatum:
25. Oktober 2007

Beiträge: 479

uiuiui...so schwer is das mit java?

ar = [1,2,3,4,5,6,7,8,9]
srand
ar = ar.sort_by { rand } # => z.B. [3, 2, 6, 1, 8, 7, 9, 5, 4]


so sähe das mit ruby aus, gibt's da nicht was vergleichbares fertigs in Java?

Osiris86

(Themenstarter)
Avatar von Osiris86

Anmeldungsdatum:
18. September 2007

Beiträge: 69

deswegen frag ich ja, ich kann mir nicht vorstellen das dass so schwer ist...
was bedeutet in deinem fall srand? random oder?

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

Für kleine Anwendungen Java nutzen ist wie mit Kanonen auf Spatzen schießen. Das ist richtig.
Das strikte OOP zeigt seine Qualitäten erst wenn Du mit mehreren Proggern an einer größeren Anwendung sitzt. Da ist es unschlagbar.

toddy Team-Icon

Ikhayateam
Avatar von toddy

Anmeldungsdatum:
31. Juli 2007

Beiträge: 9522

Wohnort: Lüneburg

BadBoy hat geschrieben:

uiuiui...so schwer is das mit java?

Hallo BadBoy,

ja in Java ist einiges schwieriger als in Ruby - deshalb benutze ich auch ganz gern mal Ruby um nicht so viel "tun" zu müssen. 😉

Lieben Gruss
Toddy

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17618

Wohnort: Berlin

Wenn Du statt eines Arrays eine ArrayList zu verwenden bereit bist, nimm dies:

import java.util.*;
/**
	StringShuffle

	@author Stefan Wagner
	@date Mi 18. Jun 12:31:48 CEST 2008

*/
public class StringShuffle
{
	public StringShuffle (String sanz)
	{
		int anz = Integer.parseInt (sanz);
		List <String> list = new ArrayList <String> (); 
		for (int i = 0; i < anz; ++i)
		{
			list.add (new String ("" + i));
		}
		
		Collections.shuffle (list);
		for (String s : list)
			System.out.println (s);
	}

	public static void main (String args[])
	{
		String param = "52";
		if (args.length == 1)
		{
			param = args[0];
		}
		new StringShuffle (param);
	}
}


Ansonsten ist es auch ein leichtes ein Array in eine Collection zu verwandeln und wieder zurück.

Mit

find_java_method.sh shuffle


hättest Du shuffle finden können, und find_java_method.sh findest Du hier: http://home.arcor.de/hirnstrom/minis/index.html#find_javamethod

Osiris86

(Themenstarter)
Avatar von Osiris86

Anmeldungsdatum:
18. September 2007

Beiträge: 69

@ user
dumme frage: und wo befüll ich die liste?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17618

Wohnort: Berlin

Osiris86 hat geschrieben:

@ user
dumme frage: und wo befüll ich die liste?

Ich verstehe die Frage nicht.
Im Computer.
Im Arbeitsspeicher.
In der JVM.

Mittels list.add ("something"); - ist doch ein komplett lauffähiges Beispiel.

Wo befüllst Du denn das Array?

Antworten |