我正在创建一个可以转动轮子的拨号器,我正面临一个问题,我想为dialer post方法生成随机浮点数,这样每次点击按钮时它们都可以有不同的速度。当我即将完成时,我从post方法得到了这个:不能在不同方法中定义的内部类中引用非final变量我希望可以在代码中进行一些更改每次单击按钮时,post方法给出的数字都不同。
按钮
dialer.post(new Runnable(){
float i = (float) Math.random(); //Suppose to be final float i = (float) Math.random()
@Override
public void run() {
dialer.post(new FlingRunnable(i));
}
});
Fling Runnable
private class FlingRunnable implements Runnable {
private float velocity;
public FlingRunnable(float velocity) {
this.velocity = velocity;
}
@Override
public void run() {
if (Math.abs(velocity) > 5 && allowRotating) {
rotateDialer(velocity / 75);
velocity /= 1.0666F;
// post this instance again
dialer.post(this);
}
}
}
答案 0 :(得分:0)
<强>问题:强>
float i = (float) Math.random();
您只是随机输入1值为0,因此结果将始终为零,
也可以将其放在范围
中,而不是将其放在run方法的范围之外<强>样品:强>
dialer.post(new FlingRunnable(new Random.nextFloat() * you_val_to_random)); //if the you_val_to_random is 3 then it will generate a float range from 0-3
而不是使用Math.Random
使用Random
类nextFloat
来为您生成随机浮点数