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循环的使用是否正确。
答案 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)
显然,存储以前生成的数字可以使用更多内存。所以你必须放弃记忆以加快这个过程。