Java 从文本文件读取问题

Java 从文本文件读取问题,java,save,text-files,average,Java,Save,Text Files,Average,我正在尝试用Java创建一个程序,计算中奖的平均成本,并将该平均值保存到再次运行时的参考值(我的目标是每次运行时都能创建更准确的结果)。平均值成功保存到我的txt文件中,但当我运行程序时,它每次都使用0作为上一个平均值。非常感谢您的帮助!谢谢 (通过更改“runs”变量可以更改它的运行次数) 公共类WinningTheLottery { 公共静态最终整数大小=5; 公共静态void main(字符串[]args) { int[]winningNums=新的int[大小]; int[]guessN

我正在尝试用Java创建一个程序,计算中奖的平均成本,并将该平均值保存到再次运行时的参考值(我的目标是每次运行时都能创建更准确的结果)。平均值成功保存到我的txt文件中,但当我运行程序时,它每次都使用0作为上一个平均值。非常感谢您的帮助!谢谢 (通过更改“runs”变量可以更改它的运行次数)

公共类WinningTheLottery
{
公共静态最终整数大小=5;
公共静态void main(字符串[]args)
{
int[]winningNums=新的int[大小];
int[]guessNums=新的int[SIZE];
花费的整数,运行次数=1;
双平均值=0;
双新AVG;
int TOTALPOWNED=0;
NumberFormat currency=NumberFormat.getCurrencyInstance();
尝试
{
Scanner fileScanner=new Scanner(新文件(“average.txt”);
PrintWriter fileWriter=新的PrintWriter(新文件(“average.txt”);
while(fileScanner.hasNextDouble())
{
oldAvg=fileScanner.nextDouble();
}
for(int i=0;i打印数组的内置方法
System.out.println(“\n[”+(i+1)+“]今天的中奖号码:\n“+数组.toString(winningNums).replace(“[”,”).replace(“]”,”);
做
{
随机分配数(猜测数);
用过的++;
}while(howManyCorrect(winningNums,guessNums)<5);
System.out.println(“在消费“+currency.format(已消费)+”之后,您赢得了幻想5彩票$75000奖金!”);
总花费+=花费;
}
新平均值=((总花费/运行)+旧平均值)/2;
fileWriter.println(newAvg);
System.out.println(“\n中奖平均成本:”+currency.format(newAvg)
+“\n(以前的平均值:“+货币.format(oldAvg)+”);
fileScanner.close();
fileWriter.close();
}
捕获(IOE异常)
{
System.out.println(e.getMessage());
}
}
公共静态void RandomlyAssignedNumber(int[]anyArray)
{
随机rng=新随机();
for(int i=0;i
在读取上一个值之前,请不要构造PrintWriter。如中所述,文件将通过创建PrintWriter被截断。

您的代码在扫描程序读取内容之前以覆盖模式(许多编程语言的默认设置)打开文件,从而在fileScanner.hasNextDouble()读取之前删除内容。在扫描仪读取后移动PrintWriter实例化,它就会工作


注意:在附加模式下打开文件,我认为这里不需要。但在Java中,您使用新的FileWriter(“average.txt”,true),然后在其周围包装一个PrintWriter。

谢谢!!不管出于什么原因,我都误以为它默认以追加模式打开
public class WinningTheLottery
{
public static final int SIZE = 5;

public static void main(String[] args)
{
    int[] winningNums = new int[SIZE];
    int[] guessNums = new int[SIZE];
    int spent, runs = 1;
    double oldAvg = 0;
    double newAvg;
    int totalSpent = 0;
    NumberFormat currency = NumberFormat.getCurrencyInstance();
    try
    {
        Scanner fileScanner = new Scanner(new File("average.txt"));
        PrintWriter fileWriter = new PrintWriter(new File("average.txt"));
        while (fileScanner.hasNextDouble())
        {
            oldAvg = fileScanner.nextDouble();
        }
        for (int i = 0; i < runs; i++)
        {
            spent = 0;
            randomlyAssignedNumbers(winningNums);
            // Arrays.toString(nameOfArray) => built in method to print an array
            System.out.println("\n[" + (i+1) + "] Todays winning numbers:\n" + Arrays.toString(winningNums).replace("[", "").replace("]", ""));
            do
            {
                randomlyAssignedNumbers(guessNums);
                spent++;
            } while (howManyCorrect(winningNums, guessNums) < 5);
            System.out.println("After spending " + currency.format(spent) + ", you won the Fantasy 5 lottery $75,000 prize!");
            totalSpent += spent;
        }
        newAvg = ((totalSpent/runs) +oldAvg)/2;
        fileWriter.println(newAvg);
        System.out.println("\nAverage Cost to win the Lottery: " + currency.format(newAvg)
                        + "\n(Previous Average: " + currency.format(oldAvg) + ")");
        fileScanner.close();
        fileWriter.close();
    }
    catch(IOException e)
    {
        System.out.println(e.getMessage());
    }

}

public static void randomlyAssignedNumbers(int[] anyArray)
{
    Random rng = new Random();
    for (int i = 0; i < anyArray.length; i++)
    {
        anyArray[i] = rng.nextInt(36) + 1;
    }
}

public static int howManyCorrect(int[] a1, int[] a2)
{
    if (a1.length != a2.length)
        return -1;
    int count = 0;
    for (int i = 0; i < a1.length; i++)
    {
        if (a1[i] == a2[i])
            count++;
    }
    return count;
}
}