我试图通过在-1和1之间给出随机生成的x和y点时找到平方与圆的比率来复制蒙特卡罗模拟。 我有问题为x和y生成随机数,因为它们返回 每个循环的值相同。
import java.util.Scanner;
public class monte
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int loop_n = input.nextInt();
//true false switch for the while loop
boolean t_f = true;
int count = 0; //counts how many iterations until inside the circle
double radius = 0; //calculates the pythagoras c from x, y coordinates
double x = 0, y = 0;
int i;
for (i = 0; i < loop_n; i++)
{
while(t_f) //while loop to see if the c from x,y coordinates is smaller than 1
{
x = -1 + (Math.random() * (2));
y = -1 + (Math.random() * (2));
radius = Math.pow((Math.pow(x, 2.0)) + Math.pow(y, 2.0), 0.5);
if (radius < 1) //terminates while loop if radius is smaller than 1
{ //thus being inside the circle
t_f = false;
}
count++;
}
System.out.println("" + radius);
System.out.println("" + count);
}
}
}
来自cmd的结果:
在循环中是否存在Math.Random的特定规则?或者我写错了代码?
答案 0 :(得分:1)
我怀疑Math.random()
工作不正常。你的循环逻辑就是关闭的。一旦设置t_f = false;
,您将始终打印相同的半径,因为您再也不会进入while
循环。因此,您应该在打印t_f = true;
和radius
后更改代码以设置count
。
或者完全放弃t_f
并改为使用break;
。
答案 1 :(得分:0)
你将t_f设置为false,只有i = 0的迭代实际上做了一些事情。所有其他迭代只打印半径和计数,它们保持不变。我认为你想在while(t_f)循环之前将t_f设置为true。