Для цикла для печати в файл загружается навсегда и файл пуст, даже если он закрыт? - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь написать код, имитирующий метод Монте-Карло для более чем 1000 испытаний, выбрав случайное число из 10, и до тех пор, пока число не станет 10, счетчик для (числа наблюдаемых белок) будет увеличиваться каждый разпока случайное число не станет 10;этот счетчик будет затем напечатан в файл.Однако это делается с помощью цикла For с вложенными циклами внутри in, но кажется, что программа в этом цикле For загружается вечно один раз, и файл остается пустым, даже если используется close ().

import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
import java.util.Random;
public class AnimalPopulation
{
    public static void main(String[] args) throws IOException
    {
    //declare and initialize variables
    Random randsquirrel = new Random();
    Scanner in = new Scanner(System.in);
    PrintWriter outFile = new PrintWriter(new File ("squirreldata.txt"));

    // User input
    System.out.println("Welcome to the Fox Squirrel Simulator");
    System.out.println("\n");
    System.out.println("How many trials should be simulated?");
    System.out.println("Enter a value greater than 1000:");
    int trialcounter = in.nextInt();

    // Input does not match requirements
    while (trialcounter <= 1000)
    {
        System.out.print("\n\n  Please try again. Enter a number greater than 1000.");
        System.out.println();
        System.out.println("How many trials should be simulated?");
        System.out.println("Enter a value greater than 1000:");
        trialcounter = in.nextInt();
    }
    System.out.println("\nsimulating trials now... one moment please ...");

    // Experiment with ratio of 1/10 fox squirrels 
    int randomsquirrel = 0;
    int totalsquirrels = 0;

    for (int i = 1; i <= trialcounter; i++)
    {
        randomsquirrel = randsquirrel.nextInt(10)+1;
            while (randomsquirrel != 10)
            {

                totalsquirrels++;
            }
                if (randomsquirrel == 10);
                {
                    totalsquirrels++;
                }
        outFile.println(totalsquirrels);
    }
    outFile.close();

    // Read file and print result
    File readfile = new File ("squirreldata.txt");
    Scanner readFile2 = new Scanner(readfile);
    Double trialtotalsquirrels = 0.0;
    while(readFile2.hasNextLine())
    {
        String token = readFile2.nextLine();
        int totalsquirrels2 = Integer.parseInt(token);
        trialtotalsquirrels += totalsquirrels2;
    }
    readFile2.close();

    System.out.println();
    System.out.println("The results!");
    System.out.println("The average number of squirrels observed until\n spotting a Fox Squirrel at the city part is: " + trialtotalsquirrels/trialcounter);
    }
}

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Вы используете неверное while, потому что вы никогда не измените значение в цикле while, и это приведет к бесконечному циклу.Правильный путь:

public static void main(String[] args) throws IOException
{
    SecureRandom randsquirrel = new SecureRandom(); // it is better
    // rest of your code
    int randomsquirrel = 0;
    int totalsquirrels = 0;
    for (int i = 1; i <= trialcounter; i++)
    {
        randomsquirrel = randsquirrel.nextInt(10)+1;
        while (randomsquirrel != 10)
        {                               
            randomsquirrel = randsquirrel.nextInt(10) + 1:
            totalsquirrels++;
            if (randomsquirrel == 10);
                break;
        }                      
    }
    // rest of your code
}
0 голосов
/ 07 октября 2018

Можете ли вы сказать мне, что здесь не так?

    randomsquirrel = randsquirrel.nextInt()+1;
    while (randomsquirrel != 10)
    {
        totalsquirrels++;
    }

В то время как цикл состоит из 3 частей, ключевое слово while, (условие) и {строки для запуска}

while (condition) {
    //lines to run.
}

Сначала проверяется условие: если он включен, он выполнит все строки для запуска.После того, как все строки сделаны, он снова проверяет условие.Если условие все еще выполняется, оно снова запустит все строки.Он будет продолжать работать по линиям навсегда , пока условие не станет ложным или не достигнет перерыва.

...