使用扫描仪和文件计算 .csv 文件的平均分数 (java)?
Using scanner and file to compute a mean score from a .csv file (java)?
使用扫描仪和文件阅读此文件,该文件包含 1972 年至 2004 年综合社会调查测得的词汇分数。计算并显示男性和女性的平均分数。
我不确定如何用逗号将行分隔成块并仍然保留正确的数据。
文件内容示例:
女,7
男,3
男,6
男,10岁
女,10
public static void main(String[] args) throws FileNotFoundException {
File file = new File("scores.csv");
Scanner in = new Scanner(file);
String run = "";
int maleCount = 0;
int femaleCount = 0;
int maleScore = 0;
int femaleScore = 0;
while (in.hasNextLine()) {
String current = in.nextLine();
in.useDelimiter(",");
if (current.contains("f")) {
femaleCount++;
// add score onto femaleScore
}
else {
maleCount++;
// add score onto maleScore
}
double femaleAverage = femaleScore / femaleCount;
System.out.println(femaleAverage);
double maleAverage = maleScore / maleCount;
System.out.println(maleAverage);
}
in.close();
}
您的计算是在 while 循环内进行的,这意味着它将在文件中每行计算一次此平均值,这是错误的。
下面的代码假定数据格式与您的 post.
中所述相同
Female,7
Male,3
Male,6
Male,10
Female,10
public static void main(String[] args) throws FileNotFoundException {
File file = new File("scores.csv");
Scanner in = new Scanner(file);
String run = "";
int maleCount = 0;
int femaleCount = 0;
int maleScore = 0;
int femaleScore = 0;
while (in.hasNextLine()) {
String current = in.nextLine();
String[] split = current.split(",");
if (split[0].toLowerCase().contains("f")) {
femaleCount++;
femaleScore += Integer.parseInt(split[1]);
// add score onto femaleScore
} else {
maleCount++;
maleScore += Integer.parseInt(split[1]);
// add score onto maleScore
}
}
double femaleAverage = femaleScore / femaleCount;
System.out.println(femaleAverage);
double maleAverage = maleScore / maleCount;
System.out.println(maleAverage);
in.close();
}
如果数据不同,post在这里,我会相应地编辑代码
假设您的输入文件结构如下:
男,4岁
女,7岁
男,3
女,5岁
等等
那么下面的代码应该可以满足您的需求。你非常接近,只需要用逗号分隔行,然后像数组一样评估部分(gender/score)。
String filePath = "C:\Users\adam\Documents\Scores.txt";
File file = new File(filePath);
Scanner scanner = new Scanner(file);
int maleCount = 0;
int femaleCount = 0;
int maleScore= 0;
int femaleScore = 0;
while(scanner.hasNext()){
String line = scanner.nextLine();
String[] split = line.split(",");
String gender = split[0];
String score = split[1];
if(gender.toLowerCase().trim().equals("male")){
maleCount++;
maleScore += Integer.valueOf(score.trim());
}else if(gender.toLowerCase().trim().equals("female")){
femaleCount++;
femaleScore += Integer.valueOf(score.trim());
}
}
scanner.close();
double maleAverage = (double) maleScore / maleCount;
double femaleAverage = (double) femaleScore / femaleCount;
System.out.println("Male Average: " + maleAverage);
System.out.println("Female Average: " + femaleAverage);
使用扫描仪和文件阅读此文件,该文件包含 1972 年至 2004 年综合社会调查测得的词汇分数。计算并显示男性和女性的平均分数。
我不确定如何用逗号将行分隔成块并仍然保留正确的数据。
文件内容示例: 女,7 男,3 男,6 男,10岁 女,10
public static void main(String[] args) throws FileNotFoundException {
File file = new File("scores.csv");
Scanner in = new Scanner(file);
String run = "";
int maleCount = 0;
int femaleCount = 0;
int maleScore = 0;
int femaleScore = 0;
while (in.hasNextLine()) {
String current = in.nextLine();
in.useDelimiter(",");
if (current.contains("f")) {
femaleCount++;
// add score onto femaleScore
}
else {
maleCount++;
// add score onto maleScore
}
double femaleAverage = femaleScore / femaleCount;
System.out.println(femaleAverage);
double maleAverage = maleScore / maleCount;
System.out.println(maleAverage);
}
in.close();
}
您的计算是在 while 循环内进行的,这意味着它将在文件中每行计算一次此平均值,这是错误的。 下面的代码假定数据格式与您的 post.
中所述相同Female,7
Male,3
Male,6
Male,10
Female,10
public static void main(String[] args) throws FileNotFoundException {
File file = new File("scores.csv");
Scanner in = new Scanner(file);
String run = "";
int maleCount = 0;
int femaleCount = 0;
int maleScore = 0;
int femaleScore = 0;
while (in.hasNextLine()) {
String current = in.nextLine();
String[] split = current.split(",");
if (split[0].toLowerCase().contains("f")) {
femaleCount++;
femaleScore += Integer.parseInt(split[1]);
// add score onto femaleScore
} else {
maleCount++;
maleScore += Integer.parseInt(split[1]);
// add score onto maleScore
}
}
double femaleAverage = femaleScore / femaleCount;
System.out.println(femaleAverage);
double maleAverage = maleScore / maleCount;
System.out.println(maleAverage);
in.close();
}
如果数据不同,post在这里,我会相应地编辑代码
假设您的输入文件结构如下:
男,4岁
女,7岁
男,3
女,5岁
等等
那么下面的代码应该可以满足您的需求。你非常接近,只需要用逗号分隔行,然后像数组一样评估部分(gender/score)。
String filePath = "C:\Users\adam\Documents\Scores.txt";
File file = new File(filePath);
Scanner scanner = new Scanner(file);
int maleCount = 0;
int femaleCount = 0;
int maleScore= 0;
int femaleScore = 0;
while(scanner.hasNext()){
String line = scanner.nextLine();
String[] split = line.split(",");
String gender = split[0];
String score = split[1];
if(gender.toLowerCase().trim().equals("male")){
maleCount++;
maleScore += Integer.valueOf(score.trim());
}else if(gender.toLowerCase().trim().equals("female")){
femaleCount++;
femaleScore += Integer.valueOf(score.trim());
}
}
scanner.close();
double maleAverage = (double) maleScore / maleCount;
double femaleAverage = (double) femaleScore / femaleCount;
System.out.println("Male Average: " + maleAverage);
System.out.println("Female Average: " + femaleAverage);