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.

Günstige Webhosting-Pakete von IONOS!

Vertrauen Sie auf flexibel skalierbares und zuverlässiges Webhosting inklusive persönlichem Berater mit IONOS!

Kostenlose Domain
SSL Zertifikat
DDoS-Schutz

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 int (oder Integer) hinterlegt, können Sie den Restwert auch problemlos ohne Java Modulo ausrechnen. Der entsprechende Code könnte so aussehen:

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 beträgt: " + restwert);
	}
}
java

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

Der Restwert beträgt: 3
java

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:

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 beträgt: " + restwert);
	}
}
java
Der Restwert beträgt: 0,0
java

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:

Dividend % Divisor
java

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

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

Die Ausgabe lautet:

Der Restwert beträgt: 3.0
java

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:

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.");
	}
}
java

Wie zu erwarten, erhalten wir folgende Ausgabe:

Bei 11 handelt es sich um eine ungerade Zahl.
java

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:

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

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

Der Restwert beträgt: -3
java

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:

public class Main {
	public static void main(String[] args) {
	int dividend = -11;
	int divisor = 4;
	int restwert = dividend % divisor;
	System.out.println("Der Restwert vor der Änderung beträgt: " + restwert);
	while (dividend < 0) dividend += divisor;
	int positiver_restwert = dividend % divisor;
	System.out.println("Der Restwert nach der Änderung beträgt: " + positiver_restwert);
	}
}
java

Nun erhalten wir diese Ausgabe:

Der Restwert vor der Änderung beträgt: -3
Der Restwert nach der Änderung beträgt: 1
java