Methodenrückgabe // Bereichsüberlauf

Status
Nicht offen für weitere Antworten.

Hugo_123

Neues Mitglied
Hallo zusammen,

ich bin blutiger Java Anfänger und habe ein kleines Anliegen ;-)

Ich möchte (muss) eine Methode bauen in welcher geprüft wird, ob es durch die Multiplikation von zwei Zahlen (Datentyp short) zu einem Bereichsüberlauf kommt.
Falls ja, soll eine Fehlermeldung ausgegeben werden, falls nein, soll das Ergebnis zurückgegeben werden.

Mein Ansatz sieht so aus:

Java:
    public short mult(short number1, short number2)
    {
        if (((number1 * number2) > (short)(Math.pow(2,15)-1)) || ((number1 * number2) < (short)(Math.pow(-2,15))))
        {
            System.out.println("Bereichsüberlauf");
        }
        else
        {
        return (short)(number1*number2);
        }
    }

Das Problem - das mit auch durchaus bewusst ist - ist ja, dass in der IF Bedingung keine return Anweisung drin ist, dies aber erwartet wird.

Ich weiß nun nur nicht, wie ich erreichen kann, dass entweder eine Fehlermeldung angezeigt wird oder das Ergebnis returned wird.
Ich könnte natürlich auch den Rückgabewert auf void setzen und beides auf der Console ausgeben, jedoch sollen auch andere Methoden Rückgabewerte dieser Methode verarbeiten können.

Puh, das wars erst einmal.
Die Lösung ist sicherlich trivial - aber mir fehlt der Ansatz ;)

Vielen Dank im Voraus für Eure Ratschläge.

Euer Hugo
 

Atze

Top Contributor
also wenn du die ausgabe auf der konsole als fehlermeldung gelten lassen willst, tut er das doch, oder?
und hab deine rechnung nicht überprüft, aber das ergebnis wird ja auch zurückgegeben, oder? was fehlt dir denn dann noch? brauchst du einen returnwert für den fehlerfall? wie wärs mit 0, oder -1? oder fehlt dir die richtige fehlermeldung? vielleicht eine (eigene) exception?
 

Hugo_123

Neues Mitglied
danke für die schnelle Antwort!

also so wie der Code aktuell ist funktioniert das Programm nicht, bzw. es lässt sich nicht kompilieren weil in der If Bedigung kein return statement drin ist.
Aber klar, wenn ich danach einfach ein return 0 mache dann geht auch das ganze.
 

MrWhite

Bekanntes Mitglied
Wenn du auf overflows testen willst, testest du am besten gegen die MAX_VALUES eines Typen. Da du anscheinend auf Multiplikationsoverflows testen musst, nimmst du am besten die Formel:

a > Short.MAX_VALUE / b

Wenn a groesser ist, dann hast du einen Overflow.

Willst du bei einem Overflow abbrechen, wirfst du am Besten eine Exception, wie der Vorredner schon bemerkte.

Das return in dem if-else-statement entfaellt und ganz am ende der methode gibst du das Multiplikationsergebnis zurueck.
 
S

Spacerat

Gast
Insgesamt sieht das dann so aus:
Java:
public short mult(short a, short b)
{
  int rc = a * b;
  if(rc < Short.MIN_VALUE || rc > Short.MAX_VALUE) {
    throw new RuntimeException("Bereichsueberschreitung");
  }
  return (short) rc;
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben