Gerade bzw. Ungerade Zufallszahl generieren

Sophie

Bekanntes Mitglied
Hallo Zusammen

Ich versuche entweder nur gerade oder nur ungerade Zahlen im Zahlenbereich von 1-9 zu generieren.
Ich bekomme aber nicht heraus, wie das funktionieren soll. Ich habe versucht irgendwie modulo mit einzubauen, das ging gar nicht. Dann dacht ich, ich könne einfach die Zufallszahl mit zwei multiplizieren und bekomme dann eine gerade Zahl, hat aber auch nicht funktioniert.

Könnt Ihr mir vielleicht weiterhelfen?
(Das ist jetzt für die Zahlen 1 bis 9, mehr hab ich leider noch nicht)

Java:
int number = (int)(Math.random()* (9 + 1));

Dankeschön
Sophie
 
Dann dacht ich, ich könne einfach die Zufallszahl mit zwei multiplizieren und bekomme dann eine gerade Zahl, hat aber auch nicht funktioniert.
Der Ansatz ist aber gut.
- Jede Zahl mit 2 multipliziert ist gerade.
- Jede gerade Zahl + 1 ist immer ungerade.
Beim generieren der Zufallszahlen musst du dann natürlich mit den Grenzen aufpassen. Willst du bspw. eine gerade Zahl zwischen 0 und 10 generieren musst du eine Zufallszahl zwischen 0 und 5 bestimmen die du dann mit 2 multiplizierst.
 
> das ging gar nicht

poste doch deinen Code der nicht geht mit konktreten Problem, z.B. in welchem Grenzbereich es nicht geht
 
Jetzt funktioniert es eigentlich ganz gut, ich bin vorher nur mit den Klammern durcheinander gekommen.

Jetzt wärs noch gut, wenn bei den geraden Zahlen die 0 nicht mit dabei wäre. Hier noch irgendjemand nen Tip?

Java:
int number = ((int)  ((Math.random()*((4 + 1)))))*2;
int number2 = (((int)  ((Math.random()*((4 + 1)))))*2)+1;
 
Also wenn es nur von 1 bis 9 gehen soll, erweist sich dieses als recht sicher:
Java:
public final class RandomTest
{
	private static final int even[] = {2,4,6,8};
	private static final int odd[] = {1,3,5,7,9};

	public static void main(String[] args)
	{
		System.out.println(getRandom(false));
		System.out.println(getRandom(true));
	}

	private static int getRandom(boolean e)
	{
		int rc = (e)? even.length : odd.length;
		rc = (int) (Math.random() * rc);
		return (e)? even[rc] : odd[rc];
	}
}
@Edit: Oder dieses hier... mit Angaben für untere Schwelle und Bereich:
Java:
public final class RandomTest
{
	public static void main(String[] args)
	{
		System.out.println(getRandom(false));
		System.out.println(getRandom(true));
	}

	private static int getRandom(boolean e)
	{
		int rc = (int) (Math.random() * 8) + 1; // 8 = Bereich - 1
                                                // 1 = untere Schwelle
		if((e && rc % 2 != 0) || (!e && rc % 2 == 0)) {
			rc++;
		}
		return rc;
	}
}
 
Zuletzt bearbeitet von einem Moderator:
was soll denn das ganze Geklammere, die meisten sind aktuell überflüssig, auch das 4+1 statt 5?
Min-Wert ist immer leicht: den Zufallsbereich verkleinern und fest einen Grundwert recht weit außen dazuaddieren
 

Zurück
Oben