繁体   English   中英

无法抵抗工作

[英]Can't get counter to work

我真的很陌生,所以请原谅我的无知。所以这是我需要做的:

  1. 确定每个人必须打开多少个瓶盖才能找到获奖的瓶盖。 答案是五分之一。
  2. 提示用户输入试用次数。
  3. 从输出文件中读取所有试验的数据。
  4. 计算为赢得奖品而打开的瓶盖的平均数量。
  5. 将结果打印到屏幕上。

这是我尝试过的方法,但是计数器不起作用。

import java.util.Scanner;
import java.util.Random;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;

public class BottleCapPrize
{
    public static void main(String [] args) throws IOException
    {

        int trials = 0;
        int loop = 1;
        int winCounter = 0;
        int random;
        double average;

        //
        Scanner in = new Scanner(System.in);
        Random rand = new Random();
        PrintWriter outFile = new PrintWriter (new File("MonteCarloMethod.txt"));

        //
        System.out.print("Number of trials: ");
        trials = in.nextInt();

        //
        for(loop = 1; loop <= trials; loop++)
        {
            random = rand.nextInt(5);
            if(random == 1)
            {
                outFile.println("Trial: " + loop + " WIN!");
                winCounter++;
            }
            outFile.println("Trial: " + loop + " LOSE");
        }

        //
        average = winCounter / trials;
        outFile.println("Average number of caps to win: " + average);
        System.out.println("Average number of caps to win: " + average);

        outFile.close();
    }
 }

您可能面临的问题是将两个int相除并期望得到double结果

int trials = 0;
int winCounter = 0;
double average;

average = winCounter / trials;

int分为两个int将导致精度下降。 而是使int成为double 至少其中之一。

double trials = 0;
double winCounter = 0;
double average;

average = winCounter / trials;

并使用in.nextDouble()

实际上,您的循环/计数器正在运行。 问题是平均计算不正确。 您需要确保将分区号视为浮点数。 因此,请执行以下计算,确保将winCounter和trial都视为浮点数:

average = (float) winCounter / (float) trials;

或者将winCounter和trial声明为float。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM