重用math.random

时间:2015-12-04 18:59:04

标签: java random

我正在Android工作室制作一个应用程序,它会创建一系列随机数,然后使用它们来制作用户应答的等式。

我遇到的问题是,在正确选择并按下按钮生成新等式后,程序会使用第一次随机化的相同数字。

我尝试过的事情:将数组放在方法之外,在课堂下。

同时使用Math.randomRandom rng = new Random()

确保使用System.out.println多次启动该方法。

我也尝试过Eclipse中的代码,它的工作方式应该如此。

我的代码中的随机用户:

public void SkapaUppgift() {

    System.out.println(test);
    test=test+1;

    for (int i = 0; i < tal.length; i++) {
        Random rng= new Random();
        tal[i] = (int) (Math.random() * ((200 - 0) + 1) + 0);
        //tal[i] = rng.nextInt(200);
    }
}

编辑:澄清。我已经使用了随机rng AND math.random,并且两者都被指定为0到200之间的范围。问题是每次调用该方法时,都会拉出相同的随机数。例如:我启动应用程序并获得数字20,25,200和3.下次我调用方法时,我得到20,25,200和3.第三次得到20,25,200和3。如果我关闭应用程序并再次启动它,我会得到4个不同的数字。我想在每次调用方法时获得不同的数字,而不仅仅是在我重新启动应用程序时。

2 个答案:

答案 0 :(得分:2)

您正在创建新的Random实例,但未使用它。尝试使用rng.nextInt()代替Math.random()

这不起作用的原因是因为Math.random()返回0(包括)和1(不包括)之间的随机双精度,但是它被向下转换为int,因此被截断,留下你的只有一种可能的结果。

编辑:在这种情况下,您需要包含更多代码。这是从哪里调用的?打印结果在哪里?我觉得这种方法工作正常,你实际上每次只打印相同的数组。

请记住,Java中的对象是按值传递的,而不是通过引用传递的。

答案 1 :(得分:0)

你应该从rng.nextInt()获得你想要的结果。您只需要确保只创建一次并在之后永远使用相同的实例。换句话说,让它成为单身人士。