Hier ist eine C# -Version von Java.Util.Random
, die ich portierte from the Java Specification.
Die beste Sache zu tun ist, ein Java-Programm zu schreiben, um eine Ladung von Zahlen zu erzeugen und zu überprüfen, dass diese C# -Version die gleichen Zahlen erzeugt.
public sealed class JavaRng
{
public JavaRng(long seed)
{
_seed = (seed^LARGE_PRIME) & ((1L << 48) - 1);
}
public int NextInt(int n)
{
if (n <= 0)
throw new ArgumentOutOfRangeException("n", n, "n must be positive");
if ((n & -n) == n) // i.e., n is a power of 2
return (int)((n * (long)next(31)) >> 31);
int bits, val;
do
{
bits = next(31);
val = bits % n;
} while (bits - val + (n-1) < 0);
return val;
}
private int next(int bits)
{
_seed = (_seed*LARGE_PRIME + SMALL_PRIME) & ((1L << 48) - 1);
return (int) (((uint)_seed) >> (48 - bits));
}
private long _seed;
private const long LARGE_PRIME = 0x5DEECE66DL;
private const long SMALL_PRIME = 0xBL;
}
wagen zu erklären, warum Samen * müssen * sein 'long'? :) Es sieht so aus als ob du versuchst etwas falsch zu machen. – J0HN
Warum brauchen Sie einen langen Samen für eine Pseudozufallszahl? – tomsv
@ J0HN Ich berechne, wo Schleim in Minecraft spawnt. – user1599078