einmalige Zufallszahlen erstellen

Status
Nicht offen für weitere Antworten.
D

drveni88

Gast
Hallo ich möchte gern ein Array mit zufälligen Zahlen erstellen um es später sortieren zu können. Jetzt möchte ich aber das jede zufällige Zahl nur ein einziges mal vorkommt.
Hab das mal selber versucht, aber irgendwie kommen einige Zahlen doch öfter vor als nur einmal :(

Ihr wisst doch bestimmt wieso ;)
Also könnte jemand bitte sagen wo mein Fehler ist, oder wie ich das ganze etwas eleganter Programmieren könnte.

[Java]
class ZufallsReihung {
private final int maxZahl= 200;

public final int[] getZufallsZahlen(int anzahl){
int[] zufall_reihung = new int[anzahl];
Random zahlen = new Random();

for(int i=0; i<zufall_reihung.length; i++){
for (int k=0; k<=i; k++){
if (zahlen.nextInt(maxZahl)!=zufall_reihung[k]){
zufall_reihung = zahlen.nextInt(maxZahl);
}else{
i--;
}
}
}
return zufall_reihung;
}// Ende zufallszahlen
} // class ZufallsReihung[/code]

mfg
 

eRaaaa

Top Contributor
oder wie ich das ganze etwas eleganter Programmieren könnte.

hmm, keine ahnung, vllt mit nem hashset ?

[Java]
public static void main(String... args) {
for (int i : getZufallsZahlen(20, 200)) {
System.out.println(i);
}
}

public static Integer[] getZufallsZahlen(int anzahl, int max) {
Set<Integer> tmpSet = new HashSet<Integer>();
Random r = new Random();
while (tmpSet.size() != anzahl) {
tmpSet.add(r.nextInt(max) + 1);
}
return tmpSet.toArray(new Integer[anzahl]);
}
[/code]
 
Zuletzt bearbeitet:

Prismapanda

Aktives Mitglied
wenn der maximalwert nicht allzu groß ist, geht vielleicht auch folgendes:

Java:
List<Integer> ints = new ArrayList<Integer>();
//Liste aller möglichen Zahlen aufbauen
for (int i = 0; i <= max; i++ {
   ints.add(i);
}
//Liste shufflen
Collections.shuffle(ints);

//Array mit Werten füllen
int[] target = new int[anzahl];
for (int i = 0; i < anzahl; i++) {
   target[i] = ints.get(i);
}

return target;

mal so locker hingeschrieben und ungetestet...

EDIT: ahja, dein Fehler liegt in der Abfrage in Zeile 10. So, wie du es schreibst reicht es, wenn ein Element der Liste nicht gleich dem neuen Zufallswert ist (wobei der Zufallswert bei jeder Abfrage auch immer ein anderer ist oO), um die Stelle k zu setzen.Du müsstest halt einen Zufallswert generieren lassen und dann im Array schauen, ob er nicht drin ist und erst dann (!) wenn kein Element gleich dem generierten Zufallselement ist, darf das Element reingesetzt werden. Eine Liste würde sich für diese Umsetzung besser eigenen, da sie z.B. die Methode contains beinhaltet, die genau das schon macht. Aber performancetechnisch besser wäre das genannte HashSet
 
Zuletzt bearbeitet:

javimka

Top Contributor
Du könntest die Zahlen schön in einer Reihenfolge aufschreiben und dann mit dem Zufallsgenerator jeweils Paare von Zahlen miteinander vertauschen. Wenn dein maxZahl 200 ist, kannst du ja kein soooo grosses Array haben. Ist nicht so kompliziert zu programmieren, wird schnell laufen und erfüllt seinen Zweck. Quick-and-dirty ;)
 

Marco13

Top Contributor
Insbesondere ist das letzte auch ... determiniert (das erste haut's raus, wenn die erste Zahl größer ist als die zweite ;) )
 

Marco13

Top Contributor
Selbst wenn man diesen Fall abfragt: Wenn man z.B. 999999 zufällige Zahlen von 1000000 möglichen haben will, wird er früher oder später (eher später) 999998 Zahlen haben, und bis er dann die letzte (der beiden noch möglichen zufälligen) Zahlen gewählt hat, kann es schon sein, dass er ein paar Millionen mal (!) eine Zahl wählt, die schon in der Ergebnismenge enthalten ist.... und man kann nicht mal beweisen, DASS er überhaupt irgendwann diese Zahlen finden wird.

Ich glaube, rein formal ist es alles andere als einfach, dafür einen determinierten Algorithmus zu schreiben. Wenn man k einmalige Zahlen aus einer Menge von n möglichen Zahlen auswählen will (mit k<=n), kann man
- Die n Zahlen speichern, shufflen und k stück auswählen -> Braucht viel (O(n)) speicher, schlecht bei großen n
- Zufällige Zahlen wählen und in ein Set packen, bis es k Stück sind -> Braucht potentiell unendlich lange (und umso länger, je näher k an n liegt)

:bahnhof:
 
B

bygones

Gast
- Die n Zahlen speichern, shufflen und k stück auswählen -> Braucht viel (O(n)) speicher, schlecht bei großen n
- Zufällige Zahlen wählen und in ein Set packen, bis es k Stück sind -> Braucht potentiell unendlich lange (und umso länger, je näher k an n liegt)

:bahnhof:
wobei speicher meistens das geringere problem gg laufzeit ist.
 

Schrubber

Bekanntes Mitglied
Java:
import java.io.*;

public class Sortieren {
	
	public static void main(String[] args) throws IOException 
	{
		Eingabe();
		Sortieren();
		Ausgabe();
	}

	static void Eingabe()
	{
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));

System.out.println("Wieviele Zahlen sollen generiert werden?");
int anzahl = Integer.parseInt(in.readLine());
int [] zahl = new int [anzahl];
for(int i=0;i<anzahl.length-1;i++)
{
zahl[i] = Math.random();
}

	}
	
	static void Sortieren()
	{
		int h;
		
		for (int i = 0; i < Zahl.length-1;i++)
		{
			if (Zahl[i] > Zahl[i+1])
			{
				h = Zahl[i+1];
				Zahl[i+1] = Zahl[i];
				Zahl[i] = h;
				i = -1;
			}
		}
	}
	static void Ausgabe()
	{
		System.out.println("Zahlen sortiert: ");
		for (int i = 0; i < Zahl.length; i++)
		{
			System.out.print(Zahl[i] + ", ");
		}
	}
}

Das sollte eigentlich soviele Zufallszahlen erstellen, wie vorher eingegeben und diese dann folgend sortieren und ausgeben. Falls dort irgendwelche Fehler drin sein sollten, bitte sagen. Hab das Script ausm Kopf geschrieben :S
 

Marco13

Top Contributor
Abgesehen davon, dass die Zahlen nicht einmalig und die Sortierung langsam und umständlich ist... Ja... :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
S einmalige Initialisierung Allgemeine Java-Themen 7
M Einmalige Rückgabe eines Wertes? Allgemeine Java-Themen 8
M [SOLVED]MVC, einmalige aktionen Allgemeine Java-Themen 7
A Zufallszahlen & Laufzeitmessung (insertionSort)? Allgemeine Java-Themen 2
Anas Zufallszahlen & Laufzeitmessung (insertionSort) Allgemeine Java-Themen 5
A Methoden Matrixfelder mit Zufallszahlen befüllen Allgemeine Java-Themen 6
Q int-Array mit Zufallszahlen füllen Allgemeine Java-Themen 3
S Wie Zufallszahlen in txt speichern? Allgemeine Java-Themen 4
L Zufallszahlen mit Random.nextdouble() Allgemeine Java-Themen 3
T Zufallszahlen generieren und dabei eine Zahl weglassen Allgemeine Java-Themen 4
F Zufallszahlen und Frames Allgemeine Java-Themen 5
A Problem mit Zufallszahlen und Multithreading Allgemeine Java-Themen 14
M nicht gleichverteilte Zufallszahlen generieren Allgemeine Java-Themen 6
R 1000 Zufallszahlen Allgemeine Java-Themen 9
H Zufallszahlen und JSP Allgemeine Java-Themen 3
N Zufallszahlen in einem gegebenen Bereich erzeugen Allgemeine Java-Themen 9
Zrebna Testkonzept erstellen - Verständnisschwierigkeiten Allgemeine Java-Themen 6
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
berserkerdq2 SceneBuilder GUI erstellt, nun muss ich noch ein Polygon erstellen, ist die Connection möglich? Allgemeine Java-Themen 3
berserkerdq2 Was heißt es mit FXML Listener zu setzen ind Buttons zu erstellen? Allgemeine Java-Themen 6
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
D Open Source Library zum erstellen von PDFs Allgemeine Java-Themen 1
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
J Power Point erstellen inklusive Diagramm Allgemeine Java-Themen 12
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
N Tree erstellen Allgemeine Java-Themen 8
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
berserkerdq2 Kann keine Labels erstellen, was ist hier syntaktisch falsch Allgemeine Java-Themen 5
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Trace-Tabelle erstellen Allgemeine Java-Themen 3
M Excel Datei Erstellen Allgemeine Java-Themen 2
OnDemand Erstellen von Quartz Jobs pro Aufgabe oder zusammenfassen Allgemeine Java-Themen 7
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
R Geometry erstellen die abhängig von Variablen ist Allgemeine Java-Themen 6
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
Avalon DTO aus mehrere Entitäten erstellen Allgemeine Java-Themen 5
Kirby.exe Distanz Map für die Distanztransformation erstellen Allgemeine Java-Themen 1
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
M Rectangle mit Java erstellen? Allgemeine Java-Themen 9
G Fläche erstellen mit Entfernungen Allgemeine Java-Themen 1
E Eigenen "Aufzählungstyp" erstellen - mit enum ? Allgemeine Java-Themen 18
T Multithreading: Wie viele Threads sollte ich erstellen? Allgemeine Java-Themen 12
B Rangliste erstellen Allgemeine Java-Themen 13
D 2,3-Baum rekursiv erstellen Allgemeine Java-Themen 20
D Datentypen 2-3 Baum erstellen mit geordnetem int-array Allgemeine Java-Themen 0
L SQL Datei in Eclipse erstellen Allgemeine Java-Themen 3
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
J File in Package erstellen & lesen mit Programmstart in externe Projekt Allgemeine Java-Themen 3
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
E Ts3API Subchannel erstellen und rein moven !! Allgemeine Java-Themen 0
J Eigene Api erstellen und dann auch verwenden - Ordnerstruktur Allgemeine Java-Themen 1
S GetMethode erstellen mit Hilfe von Parametern Allgemeine Java-Themen 9
T 2D-Grafik Chart als Image erstellen Allgemeine Java-Themen 3
I Fehler beim Ant-Package erstellen mit Java 9 Allgemeine Java-Themen 1
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
S Compiler-Fehler IntelliJ Projektdatei lässt sich nicht erstellen. Allgemeine Java-Themen 15
M 2D Array mit unterschiedlichen Längen erstellen und befüllen Allgemeine Java-Themen 11
E Swing Buttons auf knopfdruck(anderer Button) erstellen Allgemeine Java-Themen 6
S TestNG Eclipse: Reporting erstellen/ verändern Allgemeine Java-Themen 0
F .jar erstellen und starten Allgemeine Java-Themen 15
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
N 1000 MQTT Messages die Sekunde - 1000 Threads erstellen ? Allgemeine Java-Themen 10
Tommy Nightmare Klassen Globale Klassen erstellen Allgemeine Java-Themen 7
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
S Maven Jars dynamisch laden / Plugin-Struktur erstellen Allgemeine Java-Themen 14
T 32-Bit Applikationen mit Eclipse erstellen Allgemeine Java-Themen 4
R Input/Output RTF erstellen? Allgemeine Java-Themen 2
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
S Klassen Klassen "virtuell" erstellen Allgemeine Java-Themen 5
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
M Dokument erstellen Allgemeine Java-Themen 0
S Java API für GitHub erstellen Allgemeine Java-Themen 14
T Ant Jar Datei per Ant in Eclipse erstellen Allgemeine Java-Themen 2
4a61766120617274697374 Hintergrundjobs(tasks) in Java erstellen Allgemeine Java-Themen 3
K Eigene API erstellen? Allgemeine Java-Themen 13
N Benutzeroberfläche erstellen Allgemeine Java-Themen 5
Thallius Eigenes Message Center erstellen Allgemeine Java-Themen 3
perlenfischer1984 Mehrere Komponenten erstellen Allgemeine Java-Themen 3
B jni - Headerdatei erstellen Allgemeine Java-Themen 3
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
I Methoden Schnelle Hilfe benötigt - Kleines Video/Slideshow aus mehreren Bildern erstellen Allgemeine Java-Themen 3
B automatisch benannte arrays erstellen Allgemeine Java-Themen 9
F URI-Scheme mit Java unter MacOS erstellen? Allgemeine Java-Themen 0
S Mit Generics Klasse erstellen die selbst T erweitert..? Allgemeine Java-Themen 4
J Java Software Compare Files und Neue File erstellen Allgemeine Java-Themen 0
M Textfile erstellen Allgemeine Java-Themen 11
L Wie kann ich einen Keystore aus existierenden Zertifikaten erstellen? Allgemeine Java-Themen 1
K Fehler beim erstellen von .jar Datei Allgemeine Java-Themen 3
D Ordner auf Desktop erstellen(Pc unabhängig) Allgemeine Java-Themen 5
T Dll erstellen und einbinden Allgemeine Java-Themen 1
M Exceltabelle in Java erstellen und Werte einlesen Allgemeine Java-Themen 32
P Eigenstehende *.exe Datei erstellen Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben