Methode übergibt immer den gleichen Wert

Status
Nicht offen für weitere Antworten.

serrar

Mitglied
Java:
private void calcWinner() {
		int selection;
		double bereich = 1 / n; //n ist eine Klassenvariable die die Anzahl der "Dinger"(was auch immer es dann ist) enthält,
 //aus denen ausgewählt wird.
		double randomn = Math.random();
		for (selection = 1; selection <= n; selection++) 
		{
			if (randomn <= bereich * selection && randomn > bereich * (selection - 1)) 
			{
			break;				
			}
		}
		System.out.println(randomn);
		selection -= selection;
	}

Der Code sieht doch eigentlich recht vernünftig aus, irgendwo muss aber ein kleiner Fehler drinstecken denn bei der Methode kommt immer 3 raus.
 
Zuletzt bearbeitet:

serrar

Mitglied
die antwort versteh ich nicht ganz...
weil ob n ein double ist oder nicht ist doch eh wurscht, zb 1/8 ist doch nicht 0 oder 1?
ich habs jetzt mal versucht, klappt weder mit n als double, noch als int und bei der definition von bereich gecastet.
ich habe btw noch etwas rumprobiert und festgestellt, dass er immer n+1 als wert liefert.
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
doch, 1/8 ist 0, da 1 ein int und 8 ebenfalls ein int ist. wenn du [c]double = int / int;[/c] hast, wird int durch int auf int gerechnet, dann auf double gecastet. D.h. du hast immer eine Ganzzahl. rechnest du allerdings 1.0/8 hast du int und double, int wird in double gecastet, double / double = double ;)
 

serrar

Mitglied
OH! na das ist natürlich logisch... :oops:

Geben sie bitte die Anzahl der auswählbaren Objekte ein:
2
Bitte geben sie den Namen des Objekts 1 ein:
1
Bitte geben sie den Namen des Objekts 2 ein:
2
0.5 -> das ist System.out.println(bereich)
0.9389256379821731 -> und das randomn
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at main.uinterface.main(uinterface.java:23)

Das ist die Konsolenausgabe mit
Java:
double bereich = 1.0 / (double) n;
[JAVA=23]System.out.println("Und hier der sieger: " + names[g.getWinner()] + "!");[/code]
 

serrar

Mitglied
Geben sie bitte die Anzahl der auswählbaren Objekte ein:
2
Bitte geben sie den Namen des Objekts 1 ein:
1
Bitte geben sie den Namen des Objekts 2 ein:
2
1 -> selection vor definition
schleife 1 -> während der schleife
0.20501090631251506
Und hier der sieger: 2!

Ich habe nochmal die Werte von selection an ein paar stellen angezeigt und da kommt auch was lustiges... an sich scheint der code ja zu funktionieren denn die schleife läuft nur einmal, was bei random 0.2 völlig korrekt ist.
bei randomwerten über 0.5 läuft die schleife 2 mal, selection ist eins höher und dann kommt wieder index out of bounds.... ich versteh es einfach nicht, selection scheint immer nur eins zu hoch zu sein... nur woher. witzigerweise ist der wert ja vor jeglicher definition schon 1... vielleicht liegt da ja der fehler.
 

serrar

Mitglied
ähm... kann es sein dass eine laufvariable von einer schleife nach beendigung der schleife immer auf 1 gesetzt wird?
 

faetzminator

Gesperrter Benutzer
Wenn du ein Array der Grösse n hast, liegt der jeweilige Index nicht zwischen 1 und n sondern zwischen 0 und n-1. Wenn du also ein Array mit 2 Spielern hast, und 1 gewinnt, musst du auf 0 los, ansonsten auf 1. also einfach [c]g.getWinner()-1[/c] verwenden - oder gleich winner um eins tiefer speichern (da dies wohl nur ein interner Wert ist).
 

serrar

Mitglied
soa ich hab jetzt noch ein bisschen am code gebastelt... die schleifen laufen jetzt immer korrekt durch. allerdings wird immer 0 übergeben. die arraygröße ist dynamisch, ich teste momentan immer mit 3.

0
schleife 1
schleife 2
schleife 3
0.926254776785254
Und hier der sieger: 1! (ergo nach der schleife selection=1, dann dekrementiert und 0 bei der übergabe)
 

faetzminator

Gesperrter Benutzer
Also bei gibt mir die Methode immer den Wert von [c]n[/c] zurück... Eine blöde Frage: was versuchst du überhaupt zu machen? Sollen alle Teilnehmer gleichberechtigt sein?
 

serrar

Mitglied
das programm macht einfach folgendes:
man gibt an wieviele leute teilnehmen.
dann werden namen für alle in ein array geschrieben.
als nächstes kommt dann der codeabschnitt den du ja kennst, der soll einfach eine nummer zwischen 1 und n rausfinden, die dekrementier ich da das array ja bei 0 beginnt und dann ausspucken wer gewonnen hat.
also im prinzip nur ein zufallsbasiertes auswahlverfahren. der code ist ein wenig seltsam, das liegt daran dass das ganze noch erweitert werden soll.
 

Landei

Top Contributor
Sowas?
Java:
List<String> leute = new ArrayList<String>();
leute.add("Peter");
leute.add("Paul");
leute.add("Mary");
Collections.shuffle(leute);
System.out.println("Gewonnen hat: " + leute.get(0));
 

serrar

Mitglied
da ist irgendein fehler mit der klassenvariable.
die methode macht schon alles richtig, die variable wird nur irgendwie hinterher wieder zurückgesetzt.
danke für die mühe trotzdem!
 

0x7F800000

Top Contributor
der soll einfach eine nummer zwischen 1 und n rausfinden, die dekrementier ich da das array ja bei 0 beginnt und dann ausspucken wer gewonnen hat.
Du kannst dann noch zusätzlich alles mal 7 nehmen, 1729 draufaddieren, alles wieder durch 7 teilen und 247 subtrahieren.
Oder du kannst auch gleich Random.nextInt(int n) nehmen, ist imho um einiges praktischer.

@Landei: lass ma nachdenken, was hatte dieses shuffle nochmal für einen aufwand? O(n) oder irgendsowas? Mit n-maligen würfeln und umkopiererei in random-access datenstruktur? ;)
 
Zuletzt bearbeitet:

Landei

Top Contributor
Du kannst dann noch zusätzlich alles mal 7 nehmen, 1729 draufaddieren, alles wieder durch 7 teilen und 247 subtrahieren.
Oder du kannst auch gleich Random.nextInt(int n) nehmen, ist imho um einiges praktischer.
Finde ich auch :D

@Landei: lass ma nachdenken, was hatte dieses shuffle nochmal für einen aufwand? O(n) oder irgendsowas? Mit n-maligen würfeln und umkopiererei in random-access datenstruktur? ;)
Ich gehe mal davon aus, dass er nicht die Bevölkerung Deutschlands da reinpacken will, sondern zehn, zwanzig Leute oder so. Offenbar hakt es ja schon dabei, erst einmal einen korrekten Algorithmus abzuleiten. Optimieren kann man immer noch.
 

0x7F800000

Top Contributor
Ich gehe mal davon aus, dass er nicht die Bevölkerung Deutschlands da reinpacken will, sondern zehn, zwanzig Leute oder so. Offenbar hakt es ja schon dabei, erst einmal einen korrekten Algorithmus abzuleiten. Optimieren kann man immer noch.

Schon klar dass es nie einem auffallen würde... Aber gesamte struktur durchzumischen, nur um ein einzelnes element auszuwählen ist doch bisschen wie mit nem flugzeugträger auf hamster geschossen. Und vielleicht will er die leute gar nicht durhmischen, sondern die reihenfolge die ganze zeit aufbewahren.
 

0x7F800000

Top Contributor
Ich hatte das Problem ja schon gelöst und ein paar sekunden vor dir gepostet.
Öhm... ja, okay, soll mir recht sein. Habe nur hieraus:
da ist irgendein fehler mit der klassenvariable.
die methode macht schon alles richtig, die variable wird nur irgendwie hinterher wieder zurückgesetzt.
danke für die mühe trotzdem!
...nicht rauslesen können dass alles gelöst sein soll.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
B APi methode kurz anhalten Allgemeine Java-Themen 8
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
R Rekursive Methode Allgemeine Java-Themen 8
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
R rekursive und iterative Methode Allgemeine Java-Themen 3
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
D Methoden Methode zum Steinschnitt Allgemeine Java-Themen 2
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
D Returnwert aus einer Methode gerundet ausgeben lassen Allgemeine Java-Themen 2
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
snipesss Methode greift nicht auf JTextPanel zu Allgemeine Java-Themen 3
R Methode in Methode voraussetzen Allgemeine Java-Themen 8
S Überschriebene Methode der Oberklasse der Oberklasse aufrufen. Allgemeine Java-Themen 5
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
Sogomn Methode als Parameter? Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5
I Methode verallgemeinern (Methode als Parameter)? Allgemeine Java-Themen 10
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
G Threads Methode nebenbei ausführen, Status verarbeiten Allgemeine Java-Themen 4
H FTP Befehl/Java Methode für Submit im z/Os (Host) Allgemeine Java-Themen 1
M Fabrik Methode, gutes Beispiel? Allgemeine Java-Themen 0
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
N WaitForScript- methode in javafx Allgemeine Java-Themen 1
2 jede Stunde Methode ausführen Allgemeine Java-Themen 8
M Eine static-Methode verlassen Allgemeine Java-Themen 2
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
X Komponente an Methode übergeben Allgemeine Java-Themen 1
A Methode ergibt Java NullpointerException. Allgemeine Java-Themen 3
S Getestete Methode um das Beste aus URL-Nutzereingaben rauszuholen..? Allgemeine Java-Themen 4
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
M Methoden Methode Auslagern Allgemeine Java-Themen 6
P 4 Threads in einer Methode Allgemeine Java-Themen 2
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben