随机数计数器不工作

时间:2015-03-25 07:49:33

标签: java

这是一个多次掷骰子的程序,并显示获得每一方的频率和概率............

 import java.util.*;
class apples{
public static void main(String args[]){
    Random rand = new Random();
    Scanner input=new Scanner(System.in);
    int freq[]=new int [6];

    System.out.println("How many times do you want to roll the dice");
    int n=input.nextInt();

    System.out.println("turn\tface");
    for(int i=1;i<n+1;i++){
        int num=1+rand.nextInt(6);
        System.out.println(i+"\t"+num);
    ++freq[num-1];
    }

    System.out.println("face\tfrequency\tprobabitity");
    for(int i=0;i<freq.length;i++){
        float p=freq[i]/n;
        System.out.println((i+1)+"\t"+freq[i]+"\t\t"+p);
    }


}

}

运行程序后,我得到每个骰子面部的概率为0.请帮我解决。

3 个答案:

答案 0 :(得分:1)

更正:

  float p=(float)freq[i]/n;

您必须将其中一个操作符强制转换为float

所以它可能是第二个运营商,就像这样:

float p=freq[i]/(float)n;

Here's an explanation from JLS:

  

整数除法向0舍入。

答案 1 :(得分:1)

解释一下:您将一个整数(freq [i])除以另一个整数(n)。结果将再次是一个整数(因此,小数点后的所有内容都将丢失)。将其转换为浮动将会延迟(因为该数字已经正好为零)。你必须确保将一个浮点数除以一个整数,然后你的结果也将是一个浮点数(并且正确)。

答案 2 :(得分:0)

这对您有所帮助或不通知我 float p = ((float)freq[i])/n

如果要获得浮点值,则必须将float除以int。所以在这种情况下你必须转换你的freq [i]值。它会使结果更好