[英]Working with random integers
這是作業:該程序有兩個“部分”。 第一部分將運行試驗並確定每個試驗打開多少個上限,然后再找到獲勝的上限。 每個審判(人)將成為贏家。 每次試驗打開的瓶蓋數量將寫入文件。 程序的第二部分將讀取這些值並計算平均值。 平均值應該在4.5到5.5之間,因為有五分之一的獲勝機會。
它可以編譯並運行,但平均值始終為0。
我的代碼:
int randNum = 0;
Random randNumList = new Random();
int counter = 0;
Scanner in = new Scanner(System.in);
System.out.println("How many trials will there be?");
int trials = in.nextInt();
int winner = 0;
PrintWriter outFile = new PrintWriter (new File("cap.txt"));
//run trials
for (int loop = 1; loop <= trials; loop++)
{
//select random number until 5 is selected
randNum = randNumList.nextInt(6);
for (randNum = randNumList.nextInt(6); randNum == 5; randNum++)
{
randNum = randNumList.nextInt(6);
counter++;
}
outFile.println(loop + " " + randNum);
}
outFile.close ( ); //close the file when finished
String token = " ";
Scanner inFile = new Scanner(new File("cap.txt"));
while (inFile.hasNext())
{
token = inFile.next();
if(token.equals("5"))
winner++;
}
double average = winner/counter;
System.out.println("The average number is " + average);
您的cap.txt文件不包含“ 5” =>獲勝者= 0,平均值= 0 /計數器= 0(始終)。
winner/counter
返回一個int而不是double(整數除法,因為兩個操作數都是整數,因此結果被截斷)。 嘗試這個:
winner/(double)counter
那確實返回了兩倍。
除了int / int除法精度問題(應該是winner/(double)counter
或(double)winner/counter
嘗試將內部for loop
更改為do while
。 在一般情況下,寧願while
當你不知道迭代的確切數目。
另外,randNumList.nextInt(6)為[0-5],因此有6種可能的結果-> 六分之一的獲勝機會 。 若要更正此問題,請使用randNumList.nextInt(5)+ 1
for (int loop = 1; loop <= trials; loop++) {
//select random number until 5 is selected
do {
randNum = randNumList.nextInt(5) + 1;
counter++;
} while (randNum != 5);
outFile.println(loop + " " + randNum); //why here?? maybe you should add it below counter++;
}
if(token.equals("5"))
也不起作用,那么當您編寫(loop + randNum)時 ,如果您使用outFile.println(randNum);
,它應該可以工作outFile.println(randNum);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.