我在编程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.");
}
答案 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的课程我也会查阅你的书。我不打算为你做功课。还要确保你不违反数学规则。
此外,如果您的老师不需要分数结果,那么您可以通过使用每个人不断推荐的分割方法将分子除以分母,将分数转换为双精度或浮点数。
如果您的老师想要分数作为返回值,那么您最准确的结果将来自保持分数形式的分数。另外,如果不需要准确性,您可以将小数转换回分数。
再次考虑如何在纸上完成并将其复制到代码中。想一想。