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

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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! :)

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

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


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
Eurocrafter  11.01.2016, 13:24
@TeeTier

Warum sollte das unnötig sein? Wenn du Math.random anwendest kommt standardmäßig ein float oder double wert raus

und den kannst du in int casten, um eine zufällige Ganzzahl zu bekommen. Eine doppelte Umwandlung wäre echt unnötig. Eine große Fehlerquelle haben wir also nicht.

Und das ist ein möglicher Weg. Klar, es gibt noch andere. Aber gerade für Java Anfäger, der der Fragesteller zu sein scheint, ist dein Weg nicht gerade geeignet.

Und das mit dem unnötig solltest du weiter verdeutlichen anstatt nur so daherzureden. Ganz unnötig ... sollte man auf gar keinen Fall so machen und so...

0

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

newcomer  02.01.2016, 16:25

Ungerade 2,5 minus 2 = 0,5

Gerade 2 minus 2 = 0

0
BenStudio 
Fragesteller
 02.01.2016, 16:37
@newcomer

wie würde das dann in Code form aussehen? Ich habe jetzt:

System.out.print((8/3)-2) und dann wird mir 0 ausgegeben... Wo ist dann der Fehler?

0
BenStudio 
Fragesteller
 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