所以我有一个名字和11个人气排名的文件,看起来像this。 < ---(这是一个链接)我对我的下一部分所做的事情有点困惑。通常我有一个名称应用程序,如下所示:
public class Name{
private String givenName;
private int[] ranks = new int[11];
public Name(String name, int[] popularityRanks){
givenName = name;
for (int i = 0; i < 11; i++){
ranks[i] = popularityRanks[i];
}
}
public String getName(){
return givenName;
}
public int getPop(int decade){
if (decade >= 1 && decade <= 11){
return ranks[decade];
}
else{
return -1;
}
}
public String getHistoLine(int decade){
String histoLine = ranks[decade] + ": ";
return histoLine;
}
public String getHistogram(){
String histogram = "";
for (int i = 0; i < 11; i++){
histogram += ranks[i] + ": " + this.getHistoLine(i)
+ "\n";
}
return histogram;
}
}
它没有为getHistoLine完成,但这与我想要做的事情没有任何关系。通常我想从文件中获取这些名称并创建一个列表数组。
他是如何形容的:
在main中创建数组,将其传递给readNamesFile方法,然后让该方法用Name对象填充它
通过打印各种名称及其受欢迎程度排名来测试这个
例如,如果main命名数组,列表,则从readNamesFile方法返回时执行以下操作:
System.out.println( list[0].getName() + list[0].getPop(1) );
这就是我的主要观点:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class NameApp{
public static void main(String[] args){
Name list[] = new Name()
}
private static void loadFile(){
Scanner inputStream = null;
String fileName = "names.txt";
try {
inputStream = new Scanner (new File(fileName));
}
catch (FileNotFoundException e){
System.out.println("Error opening file named: " + fileName);
System.out.println("Exiting...");
}
while (inputStream.hasNext()){
}
}
}
我只是有点困惑我怎么能取名将它发送到Name对象列表[]然后获取流行度等级并将其发送到Name对象列表[]。所以我打电话的时候 列表[0] .getName()
它只会调用其中一行的名称...抱歉,我对java语言有点新意。提前致谢
答案 0 :(得分:0)
您需要正确创建Name
列表。我会使用List
,因为你不知道会有多少名字;
public static void main(String[] args){
List<Name> list = new ArrayList<Name>();
loadFile();
System.out.println(list.get(0).getPop());
}
private static void loadFile(){
Scanner inputStream = null;
String fileName = "names.txt";
try {
inputStream = new Scanner (new File(fileName));
}
catch (FileNotFoundException e){
System.out.println("Error opening file named: " + fileName);
System.out.println("Exiting...");
}
while (inputStream.hasNext()){
// givenName = something
// ranks = something;
list.add(new Name(givenName, ranks);
}
}
假设每一行都是这样的(来自你删除的评论)
A 1 234 22 43 543 32 344 32 43
你的while循环可以是这样的
while (inputStream.hasNextLIne()){
String line = inputStream.nextLine();
String tokens = line.split("\\s+");
String givenName = tokens[0];
int[] numList = new int[tokens.lenth - 1];
for (int i = 1; i < tokens.length; i++){
numList[i - 1] = Integer.parseInt(tokens[i].trim());
}
list.add(new Name(givenName, numList);
}