我正在构建一个应用程序,为此我有一个功能来填充测试数据。 简短说明:
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);
}
}
无论我多久创建一次测试数据,图片看起来总是这样:
所以随机数的趋势总是负的。那是为什么?
答案 0 :(得分:6)
从您的逻辑中可以清楚地看出,它必须创造一种消极趋势,甚至忽略了Random
的使用不遵循合同这一事实。一半时间在[0,2]范围内添加一个数字,另一半时间减去[3,5]范围内的数字。但代码很容易修复:
if(rand <= 2) // 0, 1, 2
newVal = currVal + rand;
else // 3, 4, 5
newVal = currVal - rand + 3;
更清洁的修复
newVal = currVal + random.nextInt(7)-3;
这有额外的好处,它允许值有时保持不变,我认为这应该是更合适的方式来模拟您的数据。
答案 1 :(得分:2)
我不确定你要做什么,但下面的一个块似乎会产生负面趋势
if(rand <= 2) // 0, 1, 2
newVal = currVal + rand;
else // 3, 4, 5
newVal = currVal - rand;
您正在添加较小的数字并减去较大的数字。
答案 2 :(得分:0)
我不知道你的目的是什么,但试着下限。喜欢
2+random.nextInt()
Random是随机类实例。正如其他人说的那样,使用相同的实例,你就无法生成像这样的“正确”序列。