用Random编写简单程序的效率

时间:2014-10-01 15:12:30

标签: java

import java.util.Random;


public class FindInt{

    public static void main(String[] args){
        int guess = 49;
        int trys = 0;
        Random r = new Random();
        while(r.nextInt(133300) != guess){
            ++trys;
        }
        System.out.println(guess + " has been found in random after " + trys + " trys!");
    } 

}

是否有更有效的方式来编写它,或者我对while循环的使用是否正确。

2 个答案:

答案 0 :(得分:0)

是的,你对while循环的使用是正确的。

@EricLang你试图猜测49号。你正在调用的随机函数:

public int nextInt(int n)

返回伪随机,均匀分布的int值介于0(包含)和指定值(独占)之间。 在你的情况下,n等于133300,如果你减少这个数字,你就会增加你很快找到它的概率。如果用50而不是133300来调用它,很可能会用较少的尝试猜测它。

但这一切都取决于您的要求。

答案 1 :(得分:0)

假设我们可以信任Random()类(是的,生成随机数可能很棘手)  生成随机数。 您在每次尝试中猜测数字的概率为1/133000

现在假设您最多可以猜测10个数字,然后猜测该数字的概率可达(1/13300)* 10.

由于Random类总是有可能两次返回相同的数字,因此我们可以使算法稍微聪明一些,并将算法细化为only guess a number once。 这将增加(1/13300)+(1/13299)+ ... +(1/13291)

的概率

显然,存储以前生成的数字可以使用更多内存。所以你必须放弃记忆以加快这个过程。