So berechnen Sie den absoluten Wert einer vorzeichenbehafteten zufälligen Ganzzahl

8

Ich versuche, die Zufallszahl zu erzeugen, die gespeichert wird, und ich muss den String-Wert zurückgeben.

Hier ist meine Methode:

%Vor%

Das Findbugs-Plugin von Jenkins warnt mich, dass es Bad attempt to compute absolute value of signed random integer gibt.

Dieser Code generiert eine zufällige Ganzzahl mit Vorzeichen und berechnet dann den absoluten Wert dieser zufälligen Ganzzahl. Wenn die vom Zufallszahlengenerator zurückgegebene Zahl Integer.MIN_VALUE ist, wird das Ergebnis ebenfalls negativ sein, da Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE . Dasselbe Problem entstand auch für lange Werte.

Was ist der beste Weg, den Absolutwert einer vorzeichenbehafteten Zufallszahl zu berechnen?

    
Samarland 02.05.2014, 19:50
quelle

3 Antworten

6

Verwenden %Code% Anstatt von %Code%

    
luckman 02.05.2014, 20:20
quelle
6

Betrachte ein byte . Der Wert liegt zwischen -128 und 127. Angenommen, Ihr byte hat einen Wert von -100, dann gibt Math.abs(-100) Ihnen 100. Aber was, wenn der Wert Ihres Bytes -128 ist? Sie können 128 nicht als byte darstellen, da der maximale Wert, den es darstellen kann, 127 ist. So gibt Math.abs() einfach den negativen -Parameter unverändert zurück.

Die Moral der Geschichte ist, dass Math.abs() einen negativen Wert zurückgeben kann.

    
whiskeyspider 02.05.2014 19:56
quelle
1

Klingt wie das Plugin den speziellen Fall Math.abs(rand.nextInt()) erkennt. Also schreibe etwas anderes.

Das Plug-in weiß, dass dieser Fall nicht immer funktioniert: Es weiß, dass rand.nextInt () manchmal Integer.MIN_VALUE zurückgeben kann und dass Math.abs (Integer.MIN_VALUE) nicht berechnet werden kann. Ich würde darüber nachdenken, meine eigene Zufallszahlenfunktion zu schreiben, die niemals Integer.MIN_VALUE zurückgibt.

    
james large 02.05.2014 20:51
quelle

Tags und Links