【问题标题】:Displaying info from a text file in console在控制台中显示来自文本文件的信息
【发布时间】:2019-02-01 02:55:54
【问题描述】:

我正在开发一个 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();
}

}

【问题讨论】:

    标签: java logic text-files


    【解决方案1】:

    第一件事是您必须将 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);
    }
    }
    

    【讨论】:

    • 也谢谢你,它现在可以工作了。从现在开始,我将使用这个程序作为参考。
    • 很好的例子。使用 try-with 块也可以进行小的改进,以确保文件在使用后关闭。尝试 (BufferedReader br = new BufferedReader(new FileReader(path))) { return br.readLine(); } 取自docs.oracle.com/javase/tutorial/essential/exceptions/…
    【解决方案2】:

    randNum 是 double(1 + (Math.random()* 9)) 产生 1 到 10 之间的一些小数值,因此它极不可能等于 4.0。相反,您可能希望将类型更改为 int 并使用 ThreadLocalRandom.current().nextInt(1,11) 生成介于 1 和 10 之间的值。

    【讨论】:

    • 它说 ThreadLocalRandom 无法解析。我需要为此导入一些东西吗?我以前从未使用过。
    • 是的,你需要import java.util.concurrent.ThreadLocalRandom; 假设你使用的是Java 7 或更高版本。
    • 非常感谢您的帮助,我什至不知道这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多