这是一个多次掷骰子的程序,并显示获得每一方的频率和概率............
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.请帮我解决。
答案 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]值。它会使结果更好