gpt4 book ai didi

java - coursera java 类(class)中方法 getAverageRank 的问题

转载 作者:行者123 更新时间:2023-12-01 18:09:47 24 4
gpt4 key购买 nike

我正在 coursera java 类(class)中做作业。作业是关于java中的统计数据,他们给了我一些文件,其中包含每个名字的出生数量,并想要每个名字的排名,例如hesham 15,ahmed 12和ibrahim 10,所以hesham排名第一,ahmed排名第二。名字被放入文件按排名排序(CSV 文件)Hesham M 15,然后 Ahmed M 12,依此类推。首先是女性,然后是女性。我在 getAverage 上工作,它按预期工作,但是当我尝试以不同的方法使用它时,它没有给我预期的结果,请帮助我解决这个问题,因为我陷入困境。这是两个方法的代码

public int getRank(int year, String name, String gender, FileResource fr) {
int rank = 0;
int colNum = 0;
boolean found = false;
fr = new FileResource();
for (CSVRecord record : fr.getCSVParser(false)) {
if (record.get(0).equals(name) && record.get(1).equals(gender))
found = true;
}
for (CSVRecord record : fr.getCSVParser(false)) {
colNum++;
}
for (CSVRecord record : fr.getCSVParser(false)) {
rank++;
if (record.get(0).equals(name) && record.get(1).equals(gender))
break;
}
if (found == true) {
if (gender.equals("F"))
return rank;
else
return rank = rank - (colNum / 2);
}
else
return -1;
}
<小时/>
double getAverageRank(String name, String gender) {
double average = 0;
int rank = 0;
int counter = 0;
int year = 0;
String namem = null;
DirectoryResource dr = new DirectoryResource();
for (File f : dr.selectedFiles()) {
FileResource fr = new FileResource(f);
counter++;
System.out.println("Counter is " + counter);
name = f.getName();
System.out.println("name of file is " + name);
int index = name.indexOf("yob", 0);
namem = name.substring(index + 3, index + 7);
System.out.println("name of year is " + namem);
year = Integer.parseInt(namem);
int currrank = getRank(year, name, gender, fr);
System.out.println("current rank is " + currrank);
rank = currrank + rank;
System.out.println("rank final is " + rank);
}
return rank / counter;
}

最佳答案

您的实现有两个主要问题:

  • 您使用年份覆盖 name 变量,因此您将文件名传递给 getRank(),而不是您要查找的名称。

  • 在 getRank 中,您执行fr = new FileResource(); 不要创建新的 FileResource,而是使用您获取的 FileResource 作为参数

getRank() 比您想象的要简单得多,这应该可以修复您的实现:

// fr holds your file, so all you have to do is:
// - look each line of the file until you find the name and gender
// - return the value of the 3rd column
public int getRank(int year, String name, String gender, FileResource fr) {
for (CSVRecord record : fr.getCSVParser(false)) {
if (record.get(0).equals(name) && record.get(1).equals(gender)) {
return Integer.parseInt(record.get(2));
}
}
return -1;
}
<小时/>
double getAverageRank(String name, String gender) {
DirectoryResource dr = new DirectoryResource();

int rank = 0;
int counter = 0;
for (File f : dr.selectedFiles()) {
FileResource fr = new FileResource(f);

counter++;
System.out.println("Counter is " + counter);

// here do not use the name param to hold the file name, you will lose the name you are looking for
// instead create a new variable, here fileName
String fileName = f.getName();
System.out.println("name of file is " + fileName);

int index = fileName.indexOf("yob", 0);
String yearAsString = fileName.substring(index + 3, index + 7);
System.out.println("name of year is " + yearAsString);
int year = Integer.parseInt(yearAsString);

int currrank = getRank(year, name, gender, fr);
System.out.println("Rank in current file is " + currrank);

rank = currrank + rank;
System.out.println("Rank total is " + rank);
}

int averageRank = rank / counter;
System.out.println("Average rank = " + averageRank);
return averageRank;
}

注意:

getRank() 接收年份,但我们不使用它,所以即使这有效,我认为这并不是他们正在寻找的实现。但是,我无法理解 getRank 是否需要同时接收年份和 FileResource,我认为它是其中之一。

我们可以有

public int getRank(String name, String gender, FileResource fr)

它仍然有效

关于java - coursera java 类(class)中方法 getAverageRank 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60488128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com