# Gerade bzw. Ungerade Zufallszahl generieren



## Sophie (20. Sep 2011)

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)


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

Dankeschön 
Sophie


----------



## Gast2 (20. Sep 2011)

> 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.


----------



## SlaterB (20. Sep 2011)

> das ging gar nicht

poste doch deinen Code der nicht geht mit konktreten Problem, z.B. in welchem Grenzbereich es nicht geht


----------



## Sophie (20. Sep 2011)

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?


```
int number = ((int)  ((Math.random()*((4 + 1)))))*2;
int number2 = (((int)  ((Math.random()*((4 + 1)))))*2)+1;
```


----------



## Spacerat (20. Sep 2011)

Also wenn es nur von 1 bis 9 gehen soll, erweist sich dieses als recht sicher:
	
	
	
	





```
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:
	
	
	
	





```
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;
	}
}
```


----------



## SlaterB (20. Sep 2011)

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


----------

