Программа дает один и тот же результат каждый раз, когда она должна быть случайной

Цель этой программы - взять 2 случайные переменные для дроби и посмотреть, есть ли они уже в сокращенных выражениях или нет. Предполагаемая вероятность этого составляет 6/(pi^2). Я запускаю 1000 различных комбинаций переменных и определяю, сколько их было, а что еще не уменьшилось. Тогда я решаю за пи.

Но вывод дает мне "пи-это 2.449489742783178" каждый раз, когда я запускаю его.

Кто-нибудь знает почему? Благодарю.

import java.util.*;

public class ratio1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int nonReducedCount = 0; //counts how many non reduced ratios there are
        for(int i =1; i<=1000; i++){

            Random rand = new Random();
            int n = rand.nextInt(1000)+1;  //random int creation
            int m = rand.nextInt(1000)+1;
            //Ratio ratio = new Ratio(n,m);
            if (gcd(n,m)> 1 ){ // if the ratio was not already fully reduced
                nonReducedCount++; // increase the count of non reduced ratios
            }   
        }

        int reducedCount = 1000 - nonReducedCount; //number of times the ratio was reduced already
        double reducedRatio = reducedCount / nonReducedCount; //the ratio for reduced and not reduced
        reducedRatio *= 6;
        reducedRatio = Math.sqrt(reducedRatio);
        System.out.println("pi is " + reducedRatio);
    }

    public static int gcd(int a, int b) { return b==0 ? a : gcd(b,a%b); }

}

1 ответ

Решение

Когда вы делите два целых числа, вы получаете целочисленное деление с целочисленным результатом, даже если впоследствии вы присваиваете результат double, Пытаться

double reducedRatio = (double)reducedCount / nonReducedCount;

то есть преобразовать один из операндов в double,

Другие вопросы по тегам