无法弄清楚如何读取txt文件中的分数并输出到Java中的不同txt文件

时间:2015-02-26 17:42:00

标签: java

我在编程1的基础知识中,我的教授要求我们创建一个包含10个分数的txt文件,创建一个程序来读取分数,添加它们,得到总和,然后找到平均值,最后导出得到一个不同的txt文件。

到目前为止,我已经找到了如何创建和写入文件,但是阅读我的txt文件中的分数变得越来越困难。它编译但不断读出,只要它运行就必须进行例外处理。

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

public class FahrDylanFileInputOutput {
    public static void main(String[] args) throws IOException {
        double sum = 0.0;
        File input = new File("dylfahrinput.txt");
        Scanner inputFile = new Scanner(input);
        while (inputFile.hasNext()) {
            String line = inputFile.nextLine();
            double fraction = Double.parseDouble(line);
            sum = sum + fraction;
        }
        double avg = sum / 10;

        inputFile.close();

        PrintWriter pw = new PrintWriter("dylfahroutput.txt");
        pw.println("Sum is : " + sum + "\n Average is: " + avg);
        // add this to the end of the overall program.
        pw.close();

        System.out.println("Data has been written to the txt file.");
    }
}

我可能做错了什么? 分数为1 / 10-9 / 10

更新:这里现在是完整的代码,仍然是相同的命令提示符消息:

public static void main(String[] args) throws IOException {
    double numsum = 0.0;
    double densum = 0.0;
    File input = new File("dylfahrinput.txt");
    Scanner inputFile = new Scanner(input);

    while (inputFile.hasNext()) {
        String line = inputFile.nextLine();
        String[] fract = line.split("/");
        int num = Integer.valueOf(fract[0]);
        int den = Integer.valueOf(fract[1]);
        double fraction = num / den;
        numsum = (numsum + num);
        densum = den;
    }
    double avg = numsum / 10;
    inputFile.close();

    PrintWriter pw = new PrintWriter("dylfahroutput.txt");
    pw.println("Sum is : " + numsum + "/" + densum + "\n Average is: " + avg);
    // add this to the end of the overall program.
    pw.close();

    System.out.println("Data has been written to the txt file.");
}

4 个答案:

答案 0 :(得分:1)

如果每行有一个分数,例如你的档案是

1/10
9/10

然后你必须更换一行:

double fraction = Double.parseDouble(line);

通过

String[] fract = line.split("/");
int num = Integer.valueOf(fract[0]);
int den = Integer.valueOf(fract[1]);
double fraction = (double)num / den;

答案 1 :(得分:1)

首先,看起来你大部分时间都在正确的轨道上,至少就读取文件而言,变量存储了你读过的分数之和等等。

当您遍历文件行时,大概line将包含"1/10""6/10"等字符串值。

我建议查看Double.parseDouble(String)的文档,因为它需要一个十进制格式的数字。

所以,你将不得不自己解析字符串。你会怎么做?

  

您有两个以'/'字符分隔的整数。你怎么能自己得到整数?

  

尝试String.split()

  

new String("I love pizza").split(" ")会给你[“我”,“爱”,“披萨”]  new String("243/19").split("/")会给你[“243”,“19”]。

现在,让我们假设你有几个整数,代表分子和分母。关于如何处理它们,你有很多选择。

最简单的方法是将分子加在一起并忽略分母。

答案 2 :(得分:0)

Double.parseDouble()不处理表示分数的字符串,如"1/10",只处理表示十进制数的字符串,如"0.1"

答案 3 :(得分:0)

我猜你想让程序读取文件,解析文件,做数学运算,然后输出到新文件?

首先,计算机不考虑分数,它全是0或1。

您将要做的是创建一个分数类

您的类应具有Int Type的Numerator和Int Type的分母。 你也想要有几个函数来改变分母,而分母又改变了分子。

然后你应该有一个可以用2个分数类进行数学运算的类。

我还要确保你的分数类也有一个toString()覆盖。

如果您的教授想要输出文件中的分数。

还有一些关于您的代码的评论。

如果您从文本文件输入,并且除以10 ... Tisk tisk,

您应该计算您在文本文件中找到的分数。

只是抬头。

更新

用分母总和来查看你当前的代码....糟糕的坏数学。

这是你的分数类:

public class Fraction
{
    private int numerator;
    private int denominator;

    private Fraction(){}

    public Fraction(int numerator, int denominator)
    {
        this.numerator = numerator;
        this.denominator = denominator;
    }

    public void multiplyDenominatorByFactor(int x)
    {
       this.numerator = this.numerator*x;
       this.denominator = this.denominator*x;
    }

    public void simplfy()
    {
        //... think this one out.
    }

    public String toString()
    {
        return ""+this.numerator+"/"+this.denominator+"\n";
    }
}

看看这是如何学习编程/ java的课程我也会查阅你的书。我不打算为你做功课。还要确保你不违反数学规则。

此外,如果您的老师不需要分数结果,那么您可以通过使用每个人不断推荐的分割方法将分子除以分母,将分数转换为双精度或浮点数。

如果您的老师想要分数作为返回值,那么您最准确的结果将来自保持分数形式的分数。另外,如果不需要准确性,您可以将小数转换回分数。

再次考虑如何在纸上完成并将其复制到代码中。想一想。