# Java Modulo: Funktionsweise und Nutzen des Restwertoperators erklärt

Wenn eine Division nicht glatt aufgeht, bleibt ein Restwert übrig. Um diesen in Ihrem Programm sauber auszurechnen, steht Ihnen in Java der Modulo-Operator zur Verfügung. Er ist deutlich zuverlässiger als alternative Lösungswege und wird vor allem genutzt, um zu bestimmen, ob Zahlen gerade oder ungerade sind.

## Der Modulo-Operator in Java

In allen gängigen Programmiersprachen können Sie die vier Grundrechenarten Addition, Subtraktion, Multiplikation und Division durchführen und zum Beispiel mit den passenden Java-Operatoren selbst umfangreiche Rechenaufgaben darstellen und lösen. Gerade bei der Division gibt es allerdings nicht nur im Bereich der Programmierung das Risiko, dass es **kein glattes Ergebnis** gibt. Werden zwei Ganzzahlen dividiert, besteht immer die Möglichkeit, dass ein Restwert übrigbleibt. Teilen Sie zum Beispiel 11 durch 4, bleibt ein Restwert von 3 (*2 x 4 = 8, 11 - 8 = 3*). Dies kann beim Programmieren zu Problemen führen.

Es gibt daher in Java mit dem Modulo-Operator ein Tool, das den **Restwert nach der Division zweier Zahlen** ermittelt und ausgibt. Dieser wird auch als Restwertoperator bezeichnet. Es gibt verschiedene Situationen, in denen sein Einsatz bei der Programmierung sehr wichtig sein kann. Er kann beispielsweise ermitteln, ob eine erwartete Zahl gerade oder ungerade ist oder ob es sich um eine Primzahl handelt. Zwar gäbe es auch andere Wege, um den Restwert zu ermitteln, diese stoßen aber unter Umständen schnell an ihre Grenzen. Das veranschaulicht das folgende Beispiel.

## Wofür wird der Restwertoperator benötigt?

Bei der Division überprüft man vereinfacht gesagt, wie oft ein Divisor in einen Dividenden passt. Das Ergebnis ist der Quotient. Sind nun Dividend und Divisor beide im [primitiven Java-Datentyp](https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/java-primitives/) int (oder Integer) hinterlegt, können Sie den Restwert auch problemlos ohne Java Modulo ausrechnen. Der entsprechende Code könnte so aussehen:

```java
public class Main {
	public static void main(String[] args) {
	int dividend = 11;
	int divisor = 4;
	int restwert = dividend - (divisor * (dividend / divisor));
	System.out.println("Der Restwert ist: " + restwert);
	}
}
```

Durch den Java-Befehl `System.out.println` erhalten Sie diese Ausgabe:

```java
Der Restwert ist: 3
```

Das ist zwar etwas umständlich, aber grundsätzlich möglich. Problematisch wird es allerdings, sobald mindestens einer der Operanten vom Typ `float` oder `double` ist, also ein Gleitkomma-Datentyp. In diesem Fall erhalten wir bei der gleichen Rechnung ein anderes Ergebnis:

```java
public class Main {
	public static void main(String[] args) {
	int dividend = 11;
	double divisor = 4;
	double restwert = dividend - (divisor * (dividend / divisor));
	System.out.println("Der Restwert ist: " + restwert);
	}
}
```

```java
Der Restwert ist: 0.0
```

## Syntax und Funktionsweise von Java Modulo

Der Modulo-Operator in Java gibt hingegen immer den **exakten Restwert** aus. Er führt zwar ebenfalls die Division aus, zeigt allerdings nicht deren Ergebnis an, sondern nur den Rest, der am Ende übrigbleibt. Er wird mit einem Prozentzeichen initiiert, sodass seine Syntax ganz einfach so aussieht:

```java
Dividend % Divisor
```

Für unser Beispiel von oben würde Java Modulo dementsprechend so funktionieren:

```java
public class Main {
	public static void main(String[] args) {
	int dividend = 11;
	double divisor = 4;
	double restwert = dividend % divisor;
	System.out.println("Der Restwert ist: " + restwert);
	}
}
```

Die Ausgabe lautet:

```java
Der Restwert ist: 3.0
```

## Bestimmen, ob Zahlen gerade oder ungerade sind

Java Modulo ermöglicht es Ihnen herauszufinden, ob eine Zahl gerade oder ungerade ist. Dafür bedient man sich einer einfachen Logik: Teilt man einen beliebigen Dividenden durch 2 und der Restwert ist 0, ist die Zahl gerade. Andernfalls muss die Zahl ungerade sein. Mit einer **if-else-Anweisung** lässt sich diese Annahme veranschaulichen. Dies ist der Code dazu:

```java
public class Main {
	public static void main(String[] args) {
	int dividend = 11;
	if (dividend % 2 == 0) {
	System.out.println("Bei " + dividend + " handelt es sich um eine gerade Zahl.");
	}
	else {
	System.out.println("Bei " + dividend + " handelt es sich um eine ungerade Zahl.");
	}
	}
}
```

Wie zu erwarten, erhalten wir folgende Ausgabe:

```java
Bei 11 handelt es sich um eine ungerade Zahl.
```

## Restwert mit negativen Zahlen

Grundsätzlich können Sie den Restwert natürlich auch ermitteln, wenn Dividend oder Divisor negativ sind. Dies ist ein einfaches Beispiel dafür:

```java
public class Main {
	public static void main(String[] args) {
	int dividend = -11;
	int divisor = 4;
	int restwert = dividend % divisor;
	System.out.println("Der Restwert ist: " + restwert);
	}
}
```

Da der Dividend negativ ist, wird auch der Restwert immer negativ sein. Die Ausgabe lautet daher:

```java
Der Restwert ist: -3
```

Es ist aber nicht immer gewünscht, ein negatives Ergebnis zu erhalten. Wenn Sie den Code daher ein wenig anpassen, können Sie sich einen **positiven Restwert ausgeben** lassen. Dafür überprüfen Sie zunächst, ob der Restwert unter 0 liegt. Ist dies der Fall, addieren Sie den Divisor und erhalten dadurch einen positiven Restwert. So sieht der Code dafür aus:

```java
public class Main {
	public static void main(String[] args) {
	int dividend = -11;
	int divisor = 4;
	int restwert = dividend % divisor;
	System.out.println("Der Restwert vorher ist: " + restwert);
	while (dividend < 0) dividend += divisor;
	int positiver_restwert = dividend % divisor;
	System.out.println("Der Restwert nachher ist: " + positiver_restwert);
	}
}
```

Nun erhalten wir diese Ausgabe:

```java
Der Restwert vorher ist: -3
Der Restwert nachher ist: 1
```


This is a markdown version of: [https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/java-modulo/](https://www.ionos.com/de-ch/digitalguide/websites/web-entwicklung/java-modulo/) for AI/LLM consumption.