簡體   English   中英

使用隨機整數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM