Отображение информации из текстового файла в консоли - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю над java-программой, которая должна вести себя как «виртуальная охота за мусором», в основном она случайным образом просматривает числа, пока не достигнет той, которая соответствует животному, которое вы ищете, и затем отобразит результаты.Предполагается, что информация хранится в файле, а затем отображается в консоли, но она просто завершается, как только я нажимаю «Выполнить».Я думаю, что есть какая-то логическая ошибка, потому что я ничего не понимаю в отношении синтаксиса.

import java.io.IOException; 
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner; 
public class AnimalPopulation {

public static void main(String[] args) throws IOException
{
    // TODO Auto-generated method stub

    int totalTrials = 0;
    int animalsSpotted = 0; 
    double randNum = 0;
    double myAnimal = 4.0;
    double notMyAnimal = 0; 
    String data = "int";

    Scanner in = new Scanner(System.in);
    Scanner inFile = new Scanner ("animals.txt");

    PrintWriter outFile = new PrintWriter(new File("animals.txt"));
    //BufferedReader in = new BufferedReader(new FileReader("animals.txt"));

System.out.println("How many trials will you be running? (It must be greater than or equal to 1,000.)");
totalTrials = in.nextInt();

    while(animalsSpotted < totalTrials) {
        animalsSpotted++; 
        randNum = (1 + (Math.random()* 9));

        if(randNum < myAnimal) {

            outFile.println(notMyAnimal++);
        }else if(randNum > myAnimal) {

            outFile.println(notMyAnimal++);
        }else if(randNum == myAnimal) {

            outFile.println(myAnimal++);


            while(inFile.hasNext()) {

                data = inFile.next();
                System.out.println(data);
            }

            inFile.close();



        }


    }

outFile.close();
}

}

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Во-первых, вы должны изменить randNum на int и использовать ThreadLocalRandom, как сказано в ответе, и еще одно: сначала записать все данные в файл, затем прочитать, что параллельно ничего не происходит, и вот программа дляВы в качестве примера:

import java.io.*;
import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;

public class AnimalPopulation{
   public static void main(String[] args) throws IOException {
       // TODO Auto-generated method stub

    int totalTrials = 0;
    int animalsSpotted = 0;
    int randNum = 0;
    double myAnimal = 4.0;
    double notMyAnimal = 0;
    String data = "int";

    Scanner in = new Scanner(System.in);

    PrintWriter outFile = new PrintWriter(new File("animals.txt"));
    //BufferedReader in = new BufferedReader(new FileReader("animals.txt"));

    System.out.println("How many trials will you be running? (It must be greater than or equal to 1,000.)");
    totalTrials = in.nextInt();

    while(animalsSpotted < totalTrials) {
        animalsSpotted++;
        randNum = ThreadLocalRandom.current().nextInt(1,11);

        if(randNum < myAnimal) {

            outFile.println(notMyAnimal++);
        }else if(randNum > myAnimal) {

            outFile.println(notMyAnimal++);
        }else if(randNum == myAnimal) {

            outFile.println(myAnimal++);
        }
    }
    outFile.close();
    File file = new File("animals.txt");

    BufferedReader br = new BufferedReader(new FileReader(file));

    String st;
    while ((st = br.readLine()) != null)
        System.out.println(st);
}
}
0 голосов
/ 01 февраля 2019

randNum равно double, а (1 + (Math.random()* 9)) дает некоторое дробное значение от 1 до 10, поэтому крайне маловероятно, что оно будет равно 4,0.Вместо этого вы можете изменить типы на int и использовать ThreadLocalRandom.current().nextInt(1,11), чтобы сгенерировать значение в диапазоне от 1 до 10.

...