2013-11-28 69 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

相關問題