Ich baue eine App und dafür habe ich eine Funktion, um sie mit Testdaten zu füllen. Kurzer Abriss:Java-Zufall liefert auf lange Sicht immer einen negativen Trend?
HashMap<String, Long> iIDs = new HashMap<String, Long>();
HashMap<String, Integer> vals = new HashMap<String, Integer>();
long iID1 = addIndicator("I1", "i1", Color.RED);
long iID2 = addIndicator("I2", "i2", Color.BLUE);
long iID3 = addIndicator("I3", "i3", Color.GREEN);
long iID4 = addIndicator("I4", "i4", Color.MAGENTA);
iIDs.put("iID1", iID1);
iIDs.put("iID2", iID2);
iIDs.put("iID3", iID3);
iIDs.put("iID4", iID4);
int v1 = 80;
int v2 = 30;
int v3 = 25;
int v4 = 40;
vals.put("v1", v1);
vals.put("v2", v2);
vals.put("v3", v3);
vals.put("v4", v4);
int numDays = 500;
int dateDistance = 14;
Calendar c = Calendar.getInstance();
for(int i=0;i<numDays;i++)
{
c.add(Calendar.DATE, dateDistance);
for(int j=1;j<5;j++)
{
int currVal = vals.get("v"+j);
int rand = new Random().nextInt(6);
int newVal;
if(rand <= 2) // 0, 1, 2
newVal = currVal + rand;
else // 3, 4, 5
newVal = currVal - rand;
pseudo: addPointForIndicator();
vals.put("v"+j, newVal);
}
}
Egal, wie oft ich die Testdaten zu erstellen, sieht das Bild immer wie folgt aus:
So ist der Trend der Zufallszahlen ist immer negativ. Warum das?
Warum erstellen Sie ein neues 'Random'-Objekt in jeder Schleifeniteration? – Baz
Nicht, dass es notwendigerweise Ihre Ergebnisse erklärt, aber Ihre Verwendung von 'Random' ist falsch. Sie müssen die gleiche Instanz für alle Anrufe freigeben, sonst erhalten Sie keine Pseudozufallsfolge **. –
Verwenden Sie dieselbe Instanz von 'java.util.Random' zum Generieren aller Zufallszahlen. Dies wird "die Randomisierung erhöhen", indem die Randomisierung zu einer echten Pseudo-Randomisierung gemacht wird. – Vulcan