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