Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java作业简介_Java_If Statement_Random_For Loop - Fatal编程技术网

java作业简介

java作业简介,java,if-statement,random,for-loop,Java,If Statement,Random,For Loop,我的作业说明: 基本上,我要做1000次试验。每次试用都是当我成功挑选“带奖瓶盖”时。所以每次我拿到那个奖的时候,我还得看看在那次试验中我拿到那个奖之前我用了多少瓶盖。我最终应该输出的是平均需要经过多少瓶盖才能找到奖品瓶盖 我很难在我的程序中获得平均数量的瓶子,这就是我需要帮助的地方。我的平均分最后还是不正确。至于文件的输入和输出,这是作业的一部分,我已经知道了,所以我不需要帮助。还有一件事,前两行outputFile.println代码只是为了测试程序是否正常工作 import java.io

我的作业说明:

基本上,我要做1000次试验。每次试用都是当我成功挑选“带奖瓶盖”时。所以每次我拿到那个奖的时候,我还得看看在那次试验中我拿到那个奖之前我用了多少瓶盖。我最终应该输出的是平均需要经过多少瓶盖才能找到奖品瓶盖


我很难在我的程序中获得平均数量的瓶子,这就是我需要帮助的地方。我的平均分最后还是不正确。至于文件的输入和输出,这是作业的一部分,我已经知道了,所以我不需要帮助。还有一件事,前两行outputFile.println代码只是为了测试程序是否正常工作

import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
import java.util.Random;
public class BottleCapPrize
{
public static void main(String [] args) throws IOException
{
    PrintWriter outputFile = new PrintWriter(new File("MonteCarlo.txt"));
    Random randNum = new Random();
    int bottleCapNumber = 0;
    int wins = 0;
    int capsOpened = 0;

    for(int i = 1; i <= 1000; i++)
    {
        bottleCapNumber = randNum.nextInt(5);
        while(bottleCapNumber != 0)
        {
        bottleCapNumber = randNum.nextInt(5);
        capsOpened++;
        }
        if(bottleCapNumber == 0)
        {
            capsOpened++;
            wins++;
        }
    }
    outputFile.println(capsOpened);
    outputFile.println(wins);
    int averageNumberOfBottles = (int)(((double)wins / (double)capsOpened) * 10);
    outputFile.println("The average amount of bottles that need to be opened are: " + averageNumberOfBottles);    
    outputFile.close();


    Scanner inputFile = new Scanner(new File("MonteCarlo.txt"));
    while(inputFile.hasNextLine())
    {
        String token = inputFile.nextLine();
        System.out.println(token);
    }
        inputFile.close();
}
}
import java.io.IOException;
导入java.io.PrintWriter;
导入java.io.File;
导入java.util.Scanner;
导入java.util.Random;
公共级瓶装水
{
公共静态void main(字符串[]args)引发IOException
{
PrintWriter outputFile=新的PrintWriter(新文件(“MonteCarlo.txt”);
Random randNum=新的Random();
整数=0;
int=0;
int capsOpened=0;

对于(int i=1;i您正在计算每场胜利的开局上限,因此平均公式是错误的

 int averageNumberOfBottles = (capsOpened / wins);

虽然这可能不是问题的根源,但在我看来

while (bottleCapNumber != 0) {
    bottleCapNumber = randNum.nextInt(5);
    capsOpened++;
}
if (bottleCapNumber == 0) {
    capsOpened++;
    wins++;
}
可以以更直接、更清晰的方式重写。由于在while语句末尾,
battlecapnumber
必须等于
0
(否则,您仍将在while语句中循环),因此可以重写它

while (bottleCapNumber != 0) {
    bottleCapNumber = randNum.nextInt(5);
    capsOpened++;
}
capsOpened++;
wins++;
由于加法的结合性质,很容易重新排列

capsOpened++;
while (bottleCapNumber != 0) {
    bottleCapNumber = randNum.nextInt(5);
    capsOpened++;
}
wins++;
很明显,您正在为
capsOpened
使用基于1的编号例程

至于计算平均数的除法,正如其他人所指出的,你是在强制进行整数除法,这意味着你不会产生非整数输出(结果只会是完全可能进行除法的次数)。这将极大地改变答案

你需要的是

 double averageNumberOfBottles = ((double)capsOpened / wins);
请注意,
double
cast of
capsOpened
。这强制将
capsOpened
处理为实数,而不是整数值。由于
capsOpened
现在被处理为实数,因此除以整数也将产生实数。自然,您需要一个实数变量来保存结果,因此你不能把数字切掉

我也不清楚你为什么决定除以
wins/capsOpened
,因为这会给你每个开放式cap的平均赢数。我以为你想要每个赢的开放式cap的平均数。引入一个wild“然后乘以10”可能是试图找出问题所在的过程中的遗留问题,但您肯定不希望得到10倍的正确答案

最后一个副业。虽然
java.util.Random
是一个“ok”随机数生成器,但它不像其他几个选项那样随机。当然,它是内置的,并且返回数字的速度非常快;但是,如果您真的想要一个更好(更慢)的随机数源,请使用
java.secure.SecureRandom
。在我的测试中,我通常会回来

with java.util.Random : 
4.696
4.948
4.766
4.901
4.832

with java.secure.SecureRandom : 
4.929
5.058
5.065
4.932
4.782

这还不足以确定输出差异中的静态显著性,但它确实表明
java.util.Random
的随机性低于
java.secure.SecureRandom
如果
java.util.Random
很少跨越5.0的标记,那么
java.util.Random
最终我的平均值就不正确了。你为什么要这么做将平均数除以10?同样,你可能希望使用更多的方法,使它们更小,更容易理解。