Zufallszahlen ohne zahlen einer List

programmierer12

Bekanntes Mitglied
Hallo Leute,
Ich sitze im Moment an einem wahrscheinlich ziehmlich leichten Problem. Ich möchte Zufallszahlen erstellen und zurückgeben allerdings dürfen zahlen die in einer zuvor eingelesenen Liste enthalten sind nicht zurückgegeben werden. Ich habe auch schon einen Lösungsansatz, weiß aber nicht ob er richtig arbeitet und wie ich das überprüfen soll, weil die Methode zufallszahlen von 2000 bis 50000 erstellen muss und das ja relativ lange dauert bis er alle einmal hat.
Hier einmal mein Ansatz
Java:
public static long getUnusedID(){
		
		long newID = (long) (Math.random()*50000+2345);
		long unusedID;
		
		UserListing userlist = new DbConnection(JdbcTemplate.getInstance().getDataSource()).UserListing();
		List<Long> idList = new ArrayList<Long>();
		
		for (User user : userlist) {
			
			idList.add(user.getId());
			
		}
		
		for (Long long1 : idList) {
			
			if (long1 == newID) {
				
				getUnusedID();
				
			}
			
			else {
				
				return newID;
				
			}
			
		}
		
		return newID;
		
	}

Zur Erklärung die userlist enthält user die aus Name und ID bestehen.
Hierbei geht es aber lediglich um eine ID die generiert werden soll und noch nicht benutzt wird.


MFG
programmierer12
 

HarleyDavidson

Bekanntes Mitglied
Wieso machst du das mit einer Zufallszahl?

Nimm doch einen Counter, der immer eins hochzählt.

Der erste User bekommt ID 1, der zweite ID 2 usw ...
 

Flown

Administrator
Mitarbeiter
Also falls du wirklich so etwas haben willst, dann kann ich dir nur [JAPI]UUID#randomUUID()[/JAPI] empfehlen. Auf Wikipedia kannst du nachschlagen.
 

programmierer12

Bekanntes Mitglied
Zu der Frage warum ich keinen Counter nehme:
Ist doch irgendwie logisch, wenn ich mich registriere und habe die id 7896 und der nächste wieß, dass ich mich als letztes registriert habe weiß er ja welche id ich habe weil er dann die id 7897 hat.
 

programmierer12

Bekanntes Mitglied
Die ID ist nur zum einloggen in das System gedacht.
Noch eine Frage: könnt ihr mir verraten ob meine Methode funktioniert?
 
Zuletzt bearbeitet:

programmierer12

Bekanntes Mitglied
Flow,
wie kann ich deine Methode dann verwenden, ich blick da irgendwie nicht durch!
Kannst du eventuell ein Beispiel posten wie ich das ganze lösen kann?
MFG
programmierer12
 

Sen-Mithrarin

Gesperrter Benutzer
deine methode wird definitiv mehrfach die gleiche ID liefern ...

warum ? mal dir mal den ablauf mit nem bleistift auf n stück papier ... und bachte gewisse java-besonderheiten ...
 

Flown

Administrator
Mitarbeiter
Ich weiß ja nicht was du genau machen willst. Ob du die Id nur intern verwenden würdest oder ob du sie zum login verwendest. Als Login wäre es ein wenig übertrieben, da die UUID aus 32 Zeichen besteht. Es würde sich stattdessen auszahlen einen nickname als login zu verwenden, der eindeutig ist und vom Nutzer selbst bestimmt werden kann.

Aber ich hab das jetzt einmal verwendet und hab ein sinnloses Programm geschrieben:

Java:
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;


public class UUIDExample {
	
	public static void main(String[] args) {
		new UUIDExample();
	}
	
	public UUIDExample() {
		Server s = new Server();
		s.initDemo();
		s.printPerons();
		
		System.out.println(s.getPersonById(s.getFirstId()));
		
	}
	
	class Server {
		List<Person> persons;
		
		public Server() {
			persons = new ArrayList<>();
		}
		
		public void initDemo() {
			createNewPerson("Peter");
			createNewPerson("Hans");
			createNewPerson("Karl");
		}
		
		public UUID getFirstId() {
			return persons.get(0).getId();
		}
		
		public Person createNewPerson(String name) {
			UUID id = UUID.randomUUID();
			Person p = new Person(id, name);
			persons.add(p);
			
			return p;
		}
		
		public Person getPersonById(UUID id) {
			for(Person p : persons) {
				if(p.getId().equals(id)) {
					return p;
				}
			}
			return null;
		}
		
		public void printPerons() {
			for(Person p : persons) {
				System.out.println(p);
			}
			System.out.println("-------------------------------");
		}
	}

	
	class Person {
		private UUID id;
		private String name;
		
		public Person(UUID id, String name) {
			this.id = id;
			this.name = name;
		}
		
		public UUID getId() {
			return id;
		}
		
		public void setName(String name) {
			this.name = name;
		}
		
		public String getName() {
			return name;
		}
		
		@Override
		public String toString() {
			return "Person [id=" + id +", name=" +name+"]";
		}
	}
}
 

programmierer12

Bekanntes Mitglied
Ich möchte das ganze als login haben und das mit dem username hab ich auch schon.
Ich mach das so dass der User einen Namen eingeben soll dazu eine zufällige id ausgegeben wird und das soll zum login in einer dB gespeichert werden.
 

HarleyDavidson

Bekanntes Mitglied
Soll ich das jetzt hinterfragen? ... Hmm...

Nochmal zur Sicherheit, ob ich das richtig verstanden habe:

Die zufällig generierte ID wird an der Username drangepappt. Und der loggt sich dann mit seinem Username+ID ein. Sehen dann die anderen User nicht die ID sowieso?
 

programmierer12

Bekanntes Mitglied
Nein das ist ja der Sinn der Sache. Ich frage in zwei Textfeldern einmal den selbst gewählten username und im zweiten die id im Prinzip als passwort ab. Wenn der username existiert und die id dazu passt kommt er rein.

Gesendet von meinem GT-I9070 mit Tapatalk
 

Flown

Administrator
Mitarbeiter
... zufallszahlen von 2000 bis 50000 erstellen muss und das ja relativ lange dauert bis er alle einmal hat.
...

Da ist aber nichts sicher. Wenn jemand einen Benutzernamen kennt muss er in einer Schleife nur 50000 Varianten für dein "Passwort" durchlaufen und das dauert in etwa 0.5 sek.

Darum bietet sich eher das klassische Benutzer + Passwort Muster an.
 

programmierer12

Bekanntes Mitglied
Hallo nochmal kann mir denn nicht irgendjemand einfach bei der Lösung meines Problems helfen ohne alles zu hinterfragen?!
Dafür währe ich sehr sehr dankbar!! :meld:

MFG
programmierer12
 

Tobse

Top Contributor
Mal unabhängig von den anderen sachen die hier stehen:
deine Methode braucht so lange weil du für jede ID, dies schon gibt alle nochmal aus der Datenbank ausliest:
Java:
            if (long1 == newID) {
               
                getUnusedID();
               
            }

Ich würde so vorgehen (Pseudo-Code)
Code:
1. vergebenIDs = liste aller IDs aus der Datenbank auslesen
2. zufallszahl = zufallszahl zwischen 2345 und 50000
3. solange zufallszahl in vergebenIDs
    3.1 zuffalszahl = zufallszahl zwischen 2345 und 50000
4. zufallszahl zurückgeben

Achte dann noch darauf, dass die Methode synchronized ist damit es nicht zu einer doppelten vergabe kommt.
 
Zuletzt bearbeitet:

stg

Top Contributor
Du brauchst einfach nur eine (zufällige) Permutation der im Pool verfügbaren IDs. Also einfach einmal eine Liste von 1..50000 (oder was auch immer) erstellen, mischen und irgendwo, in welcher Form auch immer speichern. Und dann nimmst du von dieser Liste einfach den ersten Wert für den ersten User, den zweiten für den zweiten usw..
 

Sen-Mithrarin

Gesperrter Benutzer
@TO
ganz erlich ... weder verstehe ich deine begründung hinter diesem schrott ... noch glaube ich das du selbst weist was du machen willst


ich fass das ganze noch mal soweit begrifflich zusammen aus den info die du gegeben hast


du hast einen login mit User-Nick und ID
du willst "sicherheit" in dem du die ID zufällig wählst
du willst die ID zufällig wählen damit niemand die schwachstelle ausnutzen kann : ich zieh mir meine eigene id , guck wer sich vor mir als letztes registriert hat und logg mich dann erfolgreich ein


hallo ? was bist du denn für einer ?
du gibst deinen usern also ein (zugegeben : wirklich extrem unsicheres) passwort vor und willst dieses "zufällig" erzeugen nur damit man es nicht auf grund der anmelde reihenfolge "knacken" kann


mal so zwei bis drei-einhalb tipps am rand

1) wenn du das ganze "absicher" willst ... sorge einfach dafür das ein user nicht an seine ID rankommt
2) präsentiere nirgendwo öffentlich eine liste der registrierungen
3) verwende die ID nicht öffentlich um die user zu identifizieren
4) lasse den user sein eigenes PW wählen und verwende die ID nur für intere zwecke
5) wo ist das problem wenn eine ID mehrfach verwendet wird ... um mal naiv drauf zu antworten ... wenn jeder eh nur seine eigene kennt ?


du gehst hier den völlig falschen ansatz von wegen "sicherheit" und sparst am falschen ende
dein prinzip ist nicht nur extrem anfällig für brute-forcing (wobei das eigentlich jedes system ist ... man braucht nur genug zeit) sondern auch extrem schlecht durchdacht und macht eine interne zusätzliche id noch lange nicht überflüssig
außerdem glaube ich kaum das man als user so sehr von begeistert sein wird wenn man sich nicht mal sein eigenes kennwort wählen darf



mein tipp
werf den schrott weg ... nimm ganz normal user + pw ... und für die interne user-id lässt du es einfach die datenbank mit nem primary-key und auto-increment machen ...

so was lächerliches in richtung "sicherheit" hab ich lange nich mehr gesehen
 

Pit Will

Neues Mitglied
Hallo Leute. Ich suche jemanden der mir beim programmieren hilft.
ich würde gerne ein Tarot Orakel auf meiner Webseite erstellen per Zufallsgenerator. Ich habe 264 Flash webseiten es soll eine Orakelseite per Knopfdruck auf meiner Seite zufällig ausgesucht werden und dann das "Video" automatisch abspielen. Könnt ihr mir dabei helfen ?
Teile des Codes: rand(1, 264); ?V= (aus der URL) array("1A1", "1A2", "1A3", "1A4", "1B1", "1B2", "1B3", "1B4", "1L1", "1L2", "1L3", "1L4", "2A1", "2A2", "2A3", "2A4", "2B1", "2B2", "2B3", "2B4", "2L1", "2L2", "2L3", "2L4", "3A1", "3A2", "3A3", "3A4", "3B1", "3B2", "3B3", "3B4", "3L1", "3L2", "3L3", "3L4", "4A1", "4A2", "4A3", "4A4", "4B1", "4B2", "4B3", "4B4", "4L1", "4L2", "4L3", "4L4", "5A1", "5A2", "5A3", "5A4", "5B1", "5B2", "5B3", "5B4", "5L1", "5L2", "5L3", "5L4", "6A1", "6A2", "6A3", "6A4", "6B1", "6B2", "6B3", "6B4", "6L1", "6L2", "6L3", "6L4", "7A1", "7A2", "7A3", "7A4", "7B1", "7B2", "7B3", "7B4", "7L1", "7L2", "7L3", "7L4", "8A1", "8A2", "8A3", "8A4", "8B1", "8B2", "8B3", "8B4", "8L1", "8L2", "8L3", "8L4", "9A1", "9A2", "9A3", "9A4", "9B1", "9B2", "9B3", "9B4", "9L1", "9L2", "9L3", "9L4", "10A1", "10A2", "10A3", "10A4", "10B1", "10B2", "10B3", "10B4", "10L1", "10L2", "10L3", "10L4", "11A1", "11A2", "11A3", "11A4", "11B1", "11B2", "11B3", "11B4", "11L1", "11L2", "11L3", "11L4", "12A1", "12A2", "12A3", "12A4", "12B1", "12B2", "12B3", "12B4", "12L1", "12L2", "12L3", "12L4", "13A1", "13A2", "13A3", "13A4", "13B1", "13B2", "13B3", "13B4", "13L1", "13L2", "13L3", "13L4", "14A1", "14A2", "14A3", "14A4", "14B1", "14B2", "14B3", "14B4", "14L1", "14L2", "14L3", "14L4", "15A1", "15A2", "15A3", "15A4", "15B1", "15B2", "15B3", "15B4", "15L1", "15L2", "15L3", "15L4", "16A1", "16A2", "16A3", "16A4", "16B1", "16B2", "16B3", "16B4", "16L1", "16L2", "16L3", "16L4", "17A1", "17A2", "17A3", "17A4", "17B1", "17B2", "17B3", "17B4", "17L1", "17L2", "17L3", "17L4", "18A1", "18A2", "18A3", "18A4", "18B1", "18B2", "18B3", "18B4", "18L1", "18L2", "18L3", "18L4", "19A1", "19A2", "19A3", "19A4", "19B1", "19B2", "19B3", "19B4", "19L1", "19L2", "19L3", "19L4", "20A1", "20A2", "20A3", "20A4", "20B1", "20B2", "20B3", "20B4", "20L1", "20L2", "20L3", "20L4", "21A1", "21A2", "21A3", "21A4", "21B1", "21B2", "21B3", "21B4", "21L1", "21L2", "21L3", "21L4", "22A1", "22A2", "22A3", "22A4", "22B1", "22B2", "22B3", "22B4", "22L1", "22L2", "22L3", "22L4");
 

programmierer12

Bekanntes Mitglied
Also ich weiß jetzt nicht ob du hier richtig bist?!
Für mich hört sich dein Problem eher nach webentwicklung an, also wenn du das in eine Webseite einbinden möchtest würde ich das an deiner Stelle eher mit Javascript oder mit php machen. Aber dabei kann ich dir leider nicht helfen!

MFG
programmierer12
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Zufallszahlen ohne Wiederholung Java Basics - Anfänger-Themen 10
G Zufallszahlen ohne doppelten Wert Java Basics - Anfänger-Themen 5
B Satz Zufallszahlen ohne Wiederholung Java Basics - Anfänger-Themen 14
H Zufallszahlen generieren Java Basics - Anfänger-Themen 5
H 36 Zufallszahlen die sich nicht wiederholen Java Basics - Anfänger-Themen 27
J Zufallszahlen generieren und Werte vergleichen Java Basics - Anfänger-Themen 3
S Hilfe : Unendlich viele Zufallszahlen erstellen? Java Basics - Anfänger-Themen 8
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
S Aus gleichverteilte Zufallszahlen normalverteilte Zufallszahlen generieren ? Java Basics - Anfänger-Themen 1
N Array mit Zufallszahlen und Divison Java Basics - Anfänger-Themen 7
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
S Schiffe versenken - Zufallszahlen in einem Array Java Basics - Anfänger-Themen 6
A Dreidimensionales Array mit Zufallszahlen befüllen Java Basics - Anfänger-Themen 18
J Klassen Math && Random: wie zufällig sind Zufallszahlen? Java Basics - Anfänger-Themen 19
T Methoden HashSet Objekt mit Zufallszahlen befüllen Java Basics - Anfänger-Themen 3
L Array-Problem/Zufallszahlen Java Basics - Anfänger-Themen 7
V Array mit Zufallszahlen - Anfänger - Hilfe Java Basics - Anfänger-Themen 12
D Array mit Zufallszahlen, dann sortieren: Hilfe gesucht! Java Basics - Anfänger-Themen 1
B Zufallszahlen unabhängig von Intervallen Java Basics - Anfänger-Themen 2
J Ungerade Zufallszahlen in JAVA Java Basics - Anfänger-Themen 31
B Zufallszahlen & Laufzeitmessung (insertionSort) Java Basics - Anfänger-Themen 7
W Zufallszahlen Java Basics - Anfänger-Themen 3
R Arrays Zufallszahlen Java Basics - Anfänger-Themen 10
W 10x10 Feld mit Zufallszahlen erstellen Java Basics - Anfänger-Themen 4
B Array erstellen,ausgeben,mit zufallszahlen füllen aber wie ? Java Basics - Anfänger-Themen 1
T Zufallszahlen von x bis 80 Java Basics - Anfänger-Themen 10
K Keine doppelten Zufallszahlen im Array Java Basics - Anfänger-Themen 17
G Zufallszahlen Gewichten Java Basics - Anfänger-Themen 3
J Zufallszahlen Häufigkeit Java Basics - Anfänger-Themen 8
L 6stellige Zufallszahlen erzeugen & auf einzigartigkeit prüfen Java Basics - Anfänger-Themen 3
W Java 2 Teams mit Zufallszahlen Java Basics - Anfänger-Themen 2
R Keine doppelten Zufallszahlen Java Basics - Anfänger-Themen 2
F Array mit Zufallszahlen sortieren Java Basics - Anfänger-Themen 7
G Methoden BigInteger Zufallszahlen erzeugen Java Basics - Anfänger-Themen 5
X write() und Zufallszahlen Java Basics - Anfänger-Themen 2
L Zufallszahlen addieren Java Basics - Anfänger-Themen 6
J Mehrere Zufallszahlen erzeugen, aber keine darf doppelt erzeugt werden - Wie? Java Basics - Anfänger-Themen 5
T Problem mit Zufallszahlen Java Basics - Anfänger-Themen 2
T Matrizzen addition mit zufallszahlen Java Basics - Anfänger-Themen 10
E Zufallszahlen Java Basics - Anfänger-Themen 7
R Probleme mit Zufallszahlen Java Basics - Anfänger-Themen 10
K Datentypen Gleiche Zufallszahlen in verschiedenen Datenstrukturen Java Basics - Anfänger-Themen 6
C Zufallszahlen mit Arrays Java Basics - Anfänger-Themen 8
P Array mit Zufallszahlen von einem Wuerfel Java Basics - Anfänger-Themen 15
B Zufallszahlen in ein Array eintragen. Java Basics - Anfänger-Themen 7
P Zufallszahlen fuer Lotto generieren Java Basics - Anfänger-Themen 28
L Hilfe, doppelte Zufallszahlen Java Basics - Anfänger-Themen 13
S Wie Zufallszahlen in txt speichern? Java Basics - Anfänger-Themen 4
K zufallszahlen in Array Speichern = Nullpointer exception Java Basics - Anfänger-Themen 24
F Aus Regulären Ausdrücken Zufallszahlen bilden Java Basics - Anfänger-Themen 6
M Zufallszahlen mit Random Java Basics - Anfänger-Themen 4
S Summe von Zufallszahlen Java Basics - Anfänger-Themen 9
B Zufallszahlen Java Basics - Anfänger-Themen 5
M Zufallszahlen aus einem bestimmten Intervall Java Basics - Anfänger-Themen 5
N Normalverteilte Zufallszahlen mit benutzerdefiniertem/r EW/Var Java Basics - Anfänger-Themen 5
C Zufallszahlen Problem Java Basics - Anfänger-Themen 6
C Zufallszahlen Java Basics - Anfänger-Themen 3
C Frage zur Generierung von Zufallszahlen Java Basics - Anfänger-Themen 9
W Zufallszahlen für Array Java Basics - Anfänger-Themen 3
G Problem mit Zufallszahlen Java Basics - Anfänger-Themen 6
G Zufallszahlen die alles einmal vorkommen Java Basics - Anfänger-Themen 15
G Lotto Zufallszahlen zählen Java Basics - Anfänger-Themen 3
A Zufallszahlen generieren Java Basics - Anfänger-Themen 2
A Problem mit dem Zufallszahlen-Generator Java Basics - Anfänger-Themen 17
J Zufallszahlen einmalig ausgeben Java Basics - Anfänger-Themen 6
B Int Array mit Zufallszahlen füllen Java Basics - Anfänger-Themen 8
R Zufallszahlen mit Java Java Basics - Anfänger-Themen 11
N Zufallszahlen wiederholungslos erzeugen Java Basics - Anfänger-Themen 8
G Zufallszahlen erraten Java Basics - Anfänger-Themen 8
K zufallszahlen int / double, gerade / ungerade problem . Java Basics - Anfänger-Themen 2
X Lotto Zufallszahlen mit ArrayList erstellen Java Basics - Anfänger-Themen 3
M Zufallszahlen fertig! aber nice to have noch offen Java Basics - Anfänger-Themen 5
M generierung von zufallszahlen Java Basics - Anfänger-Themen 4
B Zufallszahlen erzeugen die nicht gleich sind ;/ Java Basics - Anfänger-Themen 10
M Zufallszahlen Java Basics - Anfänger-Themen 3
G Zufallszahlen Java Basics - Anfänger-Themen 4
N ganzzahlige Zufallszahlen Java Basics - Anfänger-Themen 13
B Zufallszahlen je einmal in Array einfügen Java Basics - Anfänger-Themen 4
H Zufallszahlen Java Basics - Anfänger-Themen 2
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
V JSON-Objs aus JSON-Obj filtern und löschen (Manipulation ohne Kenntnis der vollst. Struktur) Java Basics - Anfänger-Themen 12
O HashTable kann ohne Performance-Verlust in Multithreaded-Anwendungen eingesetzt werden. Java Basics - Anfänger-Themen 6
T Mehrere if bedingungen ohne & Java Basics - Anfänger-Themen 2
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
P 2n Potenzieren ohne Math.pow oder pow Java Basics - Anfänger-Themen 8
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
Zentriks Hilfe zu Sieb des Eratosthenes ohne boolean Java Basics - Anfänger-Themen 5
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
R Buttons ohne Funktion Java Basics - Anfänger-Themen 2
JavaBeginner22 TextArea, ohne Zeilenumbruch? Java Basics - Anfänger-Themen 4
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
S Was macht ++ ohne Schleife? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben