math.random在循环中生成相同的数字

时间:2017-03-21 08:19:13

标签: java random montecarlo

我试图通过在-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的结果:

result from cmd

在循环中是否存在Math.Random的特定规则?或者我写错了代码?

2 个答案:

答案 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。