Ich möchte mir gerne zufällige Werte in einem Intervall generieren lassen und dabei sollen diese Werte ungerade sein.
Ich habe selbst ein bisschen gebastelt, aber leider bekomme ich des öfteren eine 0 geliefert und das kann eigentlich nicht sein, da die 0 nicht im Intervall inbegriffen ist.
Java:
importjava.util.*;publicclassZufallszahlen_Tester{privatestaticRandom rand =newRandom();publicstaticintgen_zufzahl(int min,int max){return rand.nextInt(max - min +1)+ min;}publicstaticintgen_zufzahl_ungerade(int min,int max){intvar;var=gen_zufzahl(min, max);int x =0;if((var%2==1)){
x =var;}return x;}publicstaticvoidmain(String[] args){for(int i =0; i <10; i++){System.out.println(gen_zufzahl_ungerade(3,11));}}}
das ganze sollte bitte ohne Do While erfolgen, damit ist es nämlich einfacher ;-)
Danke für eure Hilfe
Alles sollte eigentlich in der Methode. public static int gen_zufzahl_ungerade(int min, int max)
Ablaufen
var=gen_zufzahl( min, max );int x =0;if((var%2==1)){
x =var;}return x;
ist doch logisch ... immer dann, wenn Deine if-Bedingung nicht erfüllt ist, gibst Du hier einfach 'x' (also '0') zurück !
Vielleicht solltest Du Dir einen gescheiten else-Fall überlegen
nun, ich weiß auch nicht, was Du in einem solchen Fall machen willst/sollst :bahnhof:
Du könntest bspw. den gefundenen Wert 'var' in- oder dekrementieren, um dann auf jeden Fall wieder eine ungerade Zahl zu bekommen.
Oder eben doch halt eine Schleife drumlegen, die solange läuft, bis ein 'echter' ungerader Wert ermittelt wurde .....
Your choice :bae:
Gruß Klaus
EDIT
das ganze sollte bitte ohne Do While erfolgen, damit ist es nämlich einfacher
aha, und wenn es dann wieder ein gerade Zahl wird ???
Irgendwie schreit das doch dann geradezu nach einer Schleife (ob nun WHILE oder FOR ist auch egal) ..... :noe:
publicstaticintgen_zufzahl_ungerade(int min,int max){intvar;int x =0;var=gen_zufzahl(min, max);if((var%2==1)){
x =var;}else{//x = var++;var=2*gen_zufzahl( min, max )+1;}return x;}
Ich hab das ja in der while und do while locker und einfach gelöst, weil es da auch einfach ist ;-)
Ich bevorzuge aber immer gerne mal den komplizierten Weg, ich hab hierbei z.b. noch was von euch lernen können !
Danke sehr !
Bei dieser Lösung gibt es aber zwei Probleme.
1. Falls 'max' eine gerade Zahl ist (sagen wir 6), und gen_zufzahl 6 zurückgibt, wird 1 addiert und 7 zurückgegeben, was nicht in den Grenzen liegt.
2. Falls 'min' eine ungerade Zahl ist, ist die Wahrscheinlichkeit, diese zu ziehen, geringer. Wenn z.b. 'min = 1' und 'max = 3' ist, sind mögliche Werte von gen_zufzahl 1, 2, 3. 1 bleibt unverändert (33%), 2 und 3 kommt 3 raus (66%).
Mit ein bisschen Arithmetik kann man beide Probleme einfach lösen:
Java:
publicstaticintgen_zufzahl_ungerade(int min,int max){// 'number' gibt an, wie viele ungerade Zahlen es zwischen 'min' und 'max gibt.// Berechne zunächst '(max - min + 1) / 2'.// Es gibt aber noch den Spezialfall, dass 'min' und 'max' beide ungerade Zahlen sind.// Dann gibt es noch eine weitere ungerade Zahl.// Dies macht der hintere etwas kompliziertere Part.// Könnte man natürlich auch mit einem 'if' machen.int number =(max - min +1)/2+((min %2==1)?(max %2):0);int i =gen_zufzahl(0, number-1);// Nun gebe die i-te ungerade Zahl im Intervall aus.// Falls 'min' gerade ist, muss man noch 1 addieren: '(1-min%2)'.return min +(i*2)+(1-min%2);}