Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Aufgabe:
Implementieren Sie eine Methode mit dem Namen "maxInteger", die den maximalen
Wert eines Integers ermittelt und zurückliefert.
Tipp: Sobald man den maximalen Wert um eins erhöht, wird das Ergebnis
negativ.
Musterlösung:
Java:
public static int maxInteger() {
int x = 0;
while (x >= 0) {
x++;
}
return (x - 1);
}
Ich verstehe die Aufgabe nicht wirklich. Der maximale Wert eines Integers, was soll mir das sagen? Außerdem wird die while-Schleife ja nie verlassen, das ist doch auch nicht sinnvoll...
Ein Integer ist etwas komplizierter als eine "einfache" Zahl. "int" wird dargestellt durch 4 Bytes, also 32 Bits. Damit kann man in etwa 4 Milliarden Zustaende abbilden. Das erste Bit wird als Vorzeichen verwendet, also halbiert sich die Anzahl der moeglichen Werte auf etwa 2 Milliarden. Wenn du jetzt den int konstant erhoehst, erreichst du irgendwann den Punkt an welchem du den maximalen 2 Milliarden Wert erreicht hast, erhoehst du ihn weiter, wird auch das erste Bit gesetzt, wodurch das Vorzeichen gedreht wird und der Wert ist "ploetzlich" negativ. Das nennt sich auch Integer Ueberlauf.
Den maximalen und minimalen Wert kannst du auch aus den Feldern "Integer.MAX_VALUE" und "Integer.MIN_VALUE" erfahren.
Vielleicht solltest du dich mal mit der binären Zahlendarstellung und dem Zweierkomplement beschäftigen. Dann verstehst du auch, warum das Ergebnis dann negativ wird. Warum sollte die Schleife nicht verlassen werden?
du kannst dich mal darüber informieren ab wann ein binär code negativ wird
ein integer hat 2 hoch 32 werte die zur verfügung stehen
die hälfte davon befindet sich im positiven bereich mit der 0
und der rest im negativen sooo wenn du jetzt weist ab wann binär code negativ wird wirst du herausfinden
dass sobald 2 hoch 31 + 1 erreicht wird wird das ganze negativ wegen der funktionsweise von binär zahlen dann ist dein x kleiner als 0 weil das bei -2 hoch 31 ist und dann wird das while verlassen du kannst das ganze mit kleineren zahlen ausprobieren zb shorts und dir es in der konsole ausgeben lassen integer ist blöd für dieses beispiel
es kann sein dass die 2 hoch X nicht exakt richtig sind ..geht auch nur ums beispiel
Doch, erst ein arithmetischer Integer-Überlauf, dann ein Unterlauf. Befasse dich mal mit jeder einzelnen Zeile, bevor du eine Musterlösung kritisierst.
Wenn der Maxwert erreicht ist, wird der Wert negativ , wurde ja schon erwähnt. Was ja kleiner ist als 0.
An dieser Stelle verlassen wir die Schleife.
Und da wir ja jetzt nicht den maximalen negativen Wert angeben wollen, ziehen wir wieder einen ab
und bekommen im Umgehrschluss den maximalen positiven Wert.
Du solltest einen Beitrag nicht mehr ändern (außer der Korrektur von Rechtschreibfählern), wenn es bereits Antworten auf deinen Beitrag gibt. Sonst versteht man später die Antworten auf deinen Beitrag nicht.
Als ich die Korrektur begonnen hatte, gab es noch keine Kommentare darauf.
Wollte schnell meine unüberlegte Antwort berichtigen.
Aber verstehe, dass Ergebnis ist ja jetzt, wie von dir angesprochen.
(Gott sei Dank)