Возникли проблемы с использованием цикла 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;
после записи в файл.