Random 处理-为什么我的随机漫游者总是倾向于左上角?

Random 处理-为什么我的随机漫游者总是倾向于左上角?,random,processing,Random,Processing,我目前正在学习Daniel Shiffman的《代码的本质》,并一直在练习第一个练习之一——一个简单的“RandomWalker()”。我在Java中实现了类似的东西&没有任何问题,但是出于某种原因,我的walker似乎总是朝着大致相同的方向走: 这种情况100%都会发生。这是我的密码: class Walker { int x; int-y; //建造师 沃克() { x=宽度/2; y=高度/2; } 无效显示() { 笔划(0);//颜色 点(x,y);//将一个像素着色 } 无效步骤(

我目前正在学习Daniel Shiffman的《代码的本质》,并一直在练习第一个练习之一——一个简单的“RandomWalker()”。我在Java中实现了类似的东西&没有任何问题,但是出于某种原因,我的walker似乎总是朝着大致相同的方向走:

这种情况100%都会发生。这是我的密码:

class Walker
{
int x;
int-y;
//建造师
沃克()
{
x=宽度/2;
y=高度/2;
}
无效显示()
{
笔划(0);//颜色
点(x,y);//将一个像素着色
}
无效步骤()
{
浮动stepX;
逐步浮动;
stepX=随机(-1,1);
stepY=随机(-1,1);
x+=stepX;
y+=stepY;
}
}
沃克w;
无效设置()
{
尺寸(640360);
w=新沃克();
背景(255);
}
作废提款()
{
w、 步骤();
w、 显示();
}
这是随机函数的人工制品吗?我的第一个想法是,这与函数的伪随机性质有关,但教科书明确指出,这不应该是显而易见的,但这种情况每次都会发生。我想知道我的代码是否有问题


提前感谢。

您的
x
y
变量都是
int
类型。这意味着它们没有小数部分,所以无论何时对它们进行加减,它们都会被截断。以下是一些例子:

intx=1;
x=x+0.5;
//1.5被截断,x保持为1
int x=1;
x=x-.5;
//.5被截断,x变为0
这就是为什么您只看到
x
y
变量在减少。要解决这个问题,只需将
x
y
更改为
float
类型,以便它们跟踪小数

如果确实需要
x
y
成为
int
值,则需要
stepX
stepY
也成为
int
值:

int-stepX;
int-stepY;
stepX=(int)随机(-5,5);
stepY=(int)随机(-5,5);
x+=stepX;
y+=stepY;
但您可能只想将
x
y
存储为
float

附言:我喜欢随机行走者