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

Я пытаюсь создать программу, которая создает файл, который генерирует числа случайным образом, и я хочу, чтобы программа считывала эти числа из файла и анализировала его.Если случайно сгенерированное число не равно 0, программа должна продолжать генерировать числа, но если оно равно 0, то программа остановится.Однако, похоже, что моя программа не читает эти числа.

Я попытался поместить outFile.close(); и inFile.close(); в пару разных мест, чтобы посмотреть, исправит ли это что-нибудь, но похоже, что это не такразрабатывать.Я попытался отследить свой код ручкой и бумагой, но не смог найти ничего плохого.Возможно, это может быть мое размещение outFile.close(); и inFile.close();, но я не смог найти в этом ничего плохого.

import java.util.*;
import java.io.*;

public class squirrel {

public static void main(String[] args) throws IOException{
    Scanner in = new Scanner(System.in);
    PrintWriter outFile = new PrintWriter(new File("squirrel.txt"));
    Scanner inFile =  new Scanner(new File("squirrel.txt"));
    Random rand = new Random();
    int squirrelNum;
    int foxSquirrel = 0;
    int squirrelsSeen = 0;
    int trials = 0;

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

    while(trials <= 1000)
    {
        System.out.println("Please try again. Enter a value greater than 1000: ");
        trials = in.nextInt();
    }

    for(int i = 0; i <= trials; i ++)
    {
        squirrelNum = rand.nextInt(10);
        outFile.println(squirrelNum);

        while(inFile.hasNextInt())
        {
            int token = inFile.nextInt();

            while(token != 0)
            {

                squirrelsSeen ++;
            }

            if(token == 0)
            {
                foxSquirrel ++;
                squirrelsSeen ++;
            }
            outFile.close();
        }


        System.out.println("squirrelsSeen: " + squirrelsSeen);
        System.out.println("foxSquirrel: " + foxSquirrel);
    }


    inFile.close();
    System.out.println("\nsimulating trials now... one moment please...\n");
    System.out.println("The results!");
    System.out.println("The average number of squirrels until spotting a Fox Squirrel at the city park is: " + (((double)foxSquirrel / squirrelsSeen) * 100));



 }

}

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

new PrintWriter(new File("squirrel.txt")) немедленно удаляет файл.Из документации :

Если файл существует, он будет обрезан до нулевого размера;в противном случае будет создан новый файл.

Невозможно одновременно прочитать и записать один и тот же файл.(На самом деле есть некоторые случаи, когда это возможно, но они здесь не применимы.)

Не создавайте PrintWriter, пока не закончите чтение из файла и не вызовете inFile.close().Или запишите в другой файл, затем, когда вы закончите, переименуйте его в соответствии с исходным файлом.

0 голосов
/ 25 декабря 2018

А вот как это делается с помощью сканера.

File file = new File("squirrel.txt");

    try {

        Scanner sc = new Scanner(file);

        while (sc.hasNextLine()) {
            int i = sc.nextInt();
            System.out.println(i);
        }
        sc.close();
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }

И это, как вы сказали.Вы помещаете .close () в свой цикл while в своем коде.Попробуйте положить его на улицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...