2013-11-28 33 views
0

因此,我有一个文件,名称和11个人气排名看起来像this。 < ---(这是一个链接)我对我接下来的这部分工作我有点困惑,一般来说,我有名字的应用程序看起来像这样:具有名称和知名度的输入文件Java

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但是,这并不有什么做什么,我试图做的。通常我想从文件中取出这些名称并创建一个列表数组。

他怎么描述它:

创建主阵列,它传递给readNamesFile方法,让该方法填补它与名称的对象

测试此,打印出不同的名字和他们的人气排行榜

例如,如果主命名数组,列表,然后在从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对象名单[],然后采取普及的行列,并将其发送到名称对象列表[]。所以当我打电话给 列表[0] .getName()

它只会调用其中一行的名称...对不起,我对Java语言有点新鲜。在此先感谢

+0

您没有正确创建了'名称'阵列。应该像这样'Name list [] = new Name [someSize];' –

+0

从你的文件中,你想从文件中的每一行创建新的'Name's?什么是“人气排名”? –

+0

是的,我认为我的列表[]数组我希望它包含一个名称与文件中每个名字的人口。所以像列表[0] .getName会给我A和列表[0] .getPop(1)会给我140. – user3044041

回答

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); 
} 
+0

我其实已经想通了......我应该在这里发布解决方案,让人们可以看到它吗? – user3044041

+1

这个答案实际上有一个小缺陷:列表在main()中被定义和实例化,但是应该作为参数传递给loadFile(),或者变量应该是一个静态成员变量,所以loadFile() '可以访问它(参数通常是更清洁的方法)。 – 2013-11-28 05:39:18

相关问题