Возникли проблемы с использованием цикла while для имитации шанса 1 в 5

У меня проблемы с программой, которая рассчитывает, что кто-то выиграет в конкурсе, если у него есть шанс 1 к 5. Это симуляция, которая повторяет это 1000 раз. Текущий цикл повторяется один раз правильно, но просто выводит ноль в файл для всех остальных циклов, и я не могу понять, почему.

import java.util.Scanner;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
public class BottleCapPrize
{
public static void main (String [ ] args) throws IOException
{
    //establishing scanner and variables
    Scanner in = new Scanner(System.in);
    int minimumTrials = 1000;
    int enteredTrials = 0;
    int won = 0;
    int triesToWin = 0;
    double totalTries = 0;
    int winningValue = 0;
    //establishes the number of trials and sais if it is less than 1000
    while(enteredTrials < minimumTrials)
    {
    System.out.println("Please enter a number of trials greater than 1000: ");
    enteredTrials = in.nextInt();
    if(enteredTrials >= minimumTrials)
    {
        System.out.println("You enetred " + enteredTrials + " trials.");
    }
    else
    {
        System.out.println("You entered an incorrect number of trials.");
    }
    }
    //establishes file to write to
    PrintWriter outFile = new PrintWriter(new File("prizeResults.txt"));
    //writes to these files the amount of tries it takes to get the prize 1000 times
    for (int loop = 1; loop <= enteredTrials; loop++)
    {
        while(won != 1)
        {
            winningValue = (int)((Math.random() * 5.0) + 1.0);
            if(winningValue == 1)
            {
                won ++;
                triesToWin ++;
            }
            else
            {
                triesToWin ++;
            }   
        }
        winningValue = 0; 
        outFile.println(triesToWin);
        triesToWin = 0;
    }//end of for loop
    outFile.close ( ); //close the file when finished
    //finds the average number of tries it took
    File fileName = new File("prizeResults.txt");
    Scanner inFile = new Scanner(fileName);
    while (inFile.hasNextInt())
    {
        totalTries = totalTries + inFile.nextInt();
    }
    double averageTries = totalTries/enteredTrials;
    //tells the user the average
    System.out.println("You would have to by an average of " + averageTries + " bottles to win.");
}//end of main method

} // конец класса

1 ответ

Решение

Вы не сбрасываете отыгранное возвращение в ноль. Таким образом, после первого раза, когда вы увеличиваете число победителей до 1, цикл while завершается, а затем в каждом последующем цикле for он пропускает цикл while и печатает значение tryToWin, которое вы устанавливаете обратно в ноль.

Попробуйте добавить

побед = 0;

после записи в файл.

Другие вопросы по тегам