Java: Wie kann man erkennen ob ein ganzzahliger Wert beim Teilen von ints auftritt?

... komplette Frage anzeigen

3 Antworten

x und y können beliebige positive oder negative Werte annehmen (außer natürlich den Werten in den Überprüfungen auf arithmetische Fehler):

/* Hier beliebige Werte einsetzen: */
int x = 512;
int y = 8;

/* Prüfung auf Division durch Null: */
if (0 == y) {
throw new ArithmeticException("division by zero");
}

/* Prüfung auf -2147483648 / -1: */
if (-1 == y && Integer.MIN_VALUE == x) {
throw new ArithmeticException("integer overflow");
}

/* Prüfung ob Ergebnis < 1 oder ungerade: */
if (Math.abs(x) >= Math.abs(y) && 0 == (x % y)) {
System.out.println("Even! :)");
} else {
System.out.println("Odd! :(");
}

Disclaimer: Es ist jetzt 03:30 Morgens und ich bin ziemlich müde, habe aber das dumpfe Gefühl, dass die Hauptüberprüfung in der Zeile mit dem Modulo-Operator überkomplex ist. Vielleicht kann ja nochmal jemand etwas dazu sagen, der ausgeschlafener ist, als ich im Moment. :)

Gute Nacht! :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
03.01.2016, 04:10

PS: In einem Kommentar auf eine andere Antwort hat der Fragensteller geschrieben, dass ihn nur die natürlichen Zahlen interessieren, was negative Zahlen ausschließt.

In so einem Falle müsste man nur noch die Überprüfung auf Null im Dividenden durchführen, und kann das ganze wie folgt verkürzen:

int x = 512;
int y = 8;

System.out.format("Das Ergebnis von %d / %d ist ", x, y);

if (0 == y) {
System.out.println("nicht definiert! ><");
} else if (x >= y && 0 == (x % y)) {
System.out.println("eine natürliche Zahl! :)");
} else {
System.out.println("eine rationale Zahl! :(");
}
1

maal angenommen du subtrahierst das Ergebnis mit der Int Zahl. Wenn Ergebniss = 0 dann ist es Int Zahl, wenn Rest bleibt also nicht Null ist es Bruch oder so

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von newcomer
02.01.2016, 16:25

Ungerade 2,5 minus 2 = 0,5

Gerade 2 minus 2 = 0

0
Kommentar von BenStudio
02.01.2016, 17:06

Die links haben nichts mit meiner Frage zu tun... Ich will Wissen ob das Ergebnis zu der Familie der natürlichen Zahlen gehoert...

0

Um zwei Zahlen dividieren zu können, solltest du sie als float oder double angeben. Dividierst du 2 ints kommt immer der gerundete Wert raus.

Also weißt du 2 float / double Variablen einen Zufallswert zu, den du in int umwandelst (der Teil hinterm Komma wird abgeschnitten).

...

Um zu prüfen, ob es sich bei einer Zahl um eine natürliche Zahl handelt, würde ich die beiden Abfragen machen:

if (ergebnis >= 0)

if (ergebnis == (int)ergebnis)


ergebnis <= 0 solltest du natürlich nur bei der Abfrage zu natürlichen Zahlen nehmen... :)

Damit sollte es eigentlich funzen...


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
03.01.2016, 03:58

Eine Umwandlung in double und zurück ist äußerst ineffizient, und float sogar eine riesige Fehlerquelle, wegen Überläufen.

Das Ganze ist äußerst unnötig und man sollte es auf gar keinen Fall so machen.

0

Was möchtest Du wissen?