目前我有文本文件存储学生姓名及其考试成绩。文件的格式是姓氏,名字和测试分数。文本文件中的每个值都是分开但空格。所以文件看起来类似于:
Smith John 85
Swan Emma 75
我已经运行了代码,因此它将所有数据打印到控制台,但我无法做到的是获取所有测试分数,添加它们,找到平均值并打印平均值到控制台。同时打印任何学生的分数比平均分低10分。
现在这是我用来读取信息并将信息打印到控制台的代码。
public class ReadTXT
{
public static void main(String[] args)
{
{
String txtFile = "/Users/Amanda/Desktop/Studentdata.txt";
BufferedReader br = null;
String line = "";
String txtSplitBy = " ";
try {
br = new BufferedReader(new FileReader(txtFile));
while ((line = br.readLine()) != null) {
String[] LastName= line.split(txtSplitBy);
String[] FirstName = line.split(txtSplitBy);
String[] TS = line.split(txtSplitBy);
System.out.println("Last Name: " + LastName[0]
+ "\n" +"First Name: " + FirstName[1] + "\n" +
"Test Score: " + TS [2] + "\n") ;
{
double average = sum / i;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("Done");
}
}
}
这是我试图用来查找平均值的代码。
int i =Integer.parseInt ("TS");
double sum = 0.0;
for (int x = 0; x < i; sum += i++);
{
double average = sum / i;
}
我不断得到这个例外:
Exception in thread "main" java.lang.NumberFormatException: For input string: "TS"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at ReadTXT.main(ReadTXT.java:35)
我是学习java的新手,但我正在努力。
答案 0 :(得分:1)
糟糕:
int i =Integer.parseInt ("TS");
这没有意义。 “TS”应该代表什么数字?
编辑:你说:
我知道TS不是有效数字,这就是我试图将其转换为数字的原因
你不能将字母“转换”成一个数字,这也没有意义。
你需要阅读文件中的字符串,然后解析这些字符串,而不是你编写的一些字母。
您的代码应该做的是:
split(" ")
方法拆分String。Integer.parse(...)
解析返回的数组中的第3项。那么我会使用Integer.parse(String [] TS)吗?
不,这甚至都不会编译,因为您尝试将String数组传递给采用String参数的方法。
答案 1 :(得分:1)
这段代码:
String[] LastName= line.split(txtSplitBy);
String[] FirstName = line.split(txtSplitBy);
String[] TS = line.split(txtSplitBy);
并不是真的需要,因为你要分几行来创建3个不同的String数组,你想要做的就是将行拆分一次,然后从数组索引中分配变量,如下所示:
String[] splitLine = line.split(txtSplitBy);
String lastName = splitLine[0]; //first element of array
String firstName = splitLine[1]; //second element of array
String score = splitLine[2]; //third element of array
然后你可以将分数解析为一个字符串,这将是一个数字,而不是你想要变量名的"TS"
文字字符串,所以省略"
int i = Integer.parseInt (score);
然后,对于你的while循环中的每次迭代,添加一个总数并计算一个数,然后计算你的平均值。 (或创建分数列表)如:
int total = 0;
int count = 0;
List<Integer> allScores = new ArrayList<Integer>();
while ((line = br.readLine()) != null)
{
String[] splitLine = line.split(txtSplitBy);
String lastName = splitLine[0]; //first element of array
String firstName = splitLine[1]; //second element of array
String score = splitLine[2]; //third element of array
System.out.println("Last Name: " + lastName
+ "\n" +"First Name: " + firstname + "\n" +
"Test Score: " + score + "\n") ;
int i = Integer.parseInt (score);
total += i;
count++;
// Add to List
allScores.add(i);
}
double average = total/count;
循环列表
for( Integer i: allscores)
{
// Do the appropriate code here
}
如果你还需要名字,你应该创建一个Class来保存firstName,lastName和score,然后将它们添加到你的列表中。