繁体   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