Find the Bug

Gestern habe ich ein bißchen rumgehackt und bin mal wieder in den selben Fehler gerannt. Hier mal als Knobelaufgabe für alle Nerds:

Ausschnitt aus einer Java-Methode:

int bereich = 11;
int probSum = 3;
Random r1 = new Random(42);
Random r2 = new Random(23);
for (int i = 0; i < 17 ; i++) {
probSum = (Math.abs(r1.nextInt()) + Math.abs(r2.nextInt())) % bereich;
System.out.println(probSum);
}

Ausgabe z.B:

2

12

-4

Quizfrage: Wie kann es sein, dass probSum nach dieser Zuweisung eine negative Zahl ist?????

5 thoughts on “Find the Bug”

  1. dieser Eintrag hat zu hochinteressanten Gesprächen mit meinen Kollegen geführt. In der “Sprache” VB wird obiges Vorgehen mit einer Runtime-Exception abgestraft. “Ein Bug von Java!”, wurde proklamiert. Ich aber sage: Ist doch quatsch! Kein Fehler, sondern eine Denkweise! In VB ist die Welt eine Scheibe, in Java eine Kugel…
    Wer mir folgen kann, kriegt einen Job vermittelt… 😉

    (Im Übrigen können primitive Datentypen natürlich keine Exceptions werfen.)

  2. Na ist doch klar: wenn man zwei negative Zahlen addiert, ist die Summe auch negativ.
    Oder du hast einen alten Pentium MMX mit Bug.

  3. Mönsch Tobi… Is ja nett, dass du dein Glück versuchst, ABER: Math.abs(x) gibt den Betrag der Zahl x zurück. Also immer bis auf einen einzigen Fall… Und zwar bei der Zahl -2147483648. Da gibt Math.abs() die gleiche Zahl zurück.
    Kurz gefasst: Deine Idee ist shit, aber meine Erklärung bietet einen Hinweis.

  4. In Pascal definiert man gewöhnlich eine Konstante MAXINT, deren Präsenz dem Programmierer in der Regel hilft sich der Ursache des beschriebenen Problems bewußt zu bleiben…

Comments are closed.