2013-05-29 42 views
2

我已經成功地從2個文件中提取數據並將它們存儲在它們各自類中的數組對象中。這是我存儲在數組對象中的一些數據:從文件中搜索提取的數據,並將其存儲到數組中以獲取答案。 IO

2005,Arsenal,ManU,Arsenal,WestHam,Y,2,3,40000 
2006,ManU,Chelsea,ManU,WestHam,N 
2007,ManU,Arsenal,ManU,WestHam,Y,1,0,260000 
2008,Chelsea,ManU,Chelsea,Swansea,Y,4,0,285630 
2009,Chelsea,ManCity,Chelsea,Swansea,N 

每個逗號代表不同的列。這是我的代碼來存儲它:

try{ 
Scanner kd = new Scanner(file); 
    while(kd.hasNext()){ 
     String data = kd.nextLine(); 
     String [] values = data.split(","); 
     String year = values[0]; 
     String wScore = "N/A" , lScore = "N/A", crowd = "N/A"; 

     if(inputYears.equals(year)) 
     { 
     g.setPremier(values[1]); 
     g.setLosing(values[2]); 

我做了一些用戶,但作爲建議,現在唯一的問題是即時得到勝利者的blank.For例如:

Year: 2005 
    Premier: 

它應該是:

Premier: Arsenal 

無論如何,我可以解決這個問題嗎?

+1

使用CSV解析庫,如OpenCSV? – fge

+0

我們還沒有被教過如何使用它,所以我假設我不能使用它。 – roro

+0

呃?那麼,如果你想要認真做Java,那麼你將不得不使用如何學習外部庫,所以不妨早點開始;) – fge

回答

1

好了,如果用戶打算僅在今年進行查詢,那麼你應該有一個地圖關鍵

在初始化階段,嘗試做這樣的事情:

Map<String, ArrayList<String>> map= new HashMap<String, ArrayList<String>>(); 

while(kd.hasNext()){ 
    String data = kd.nextLine(); 
    String [] values = data.split(","); 
    String year = values[0]; 
    String premiers = values[1]; 
    //String otherStuff= values[2]; and so on 

    ArrayList<String> temp= new ArrayList<String>(); 
    temp.add(premiers); 

    //temp.add(otherStuff); 
    map.put(year, temp); 
} 

之後,你可以查詢這樣的:

ArrayList<String> values= map.get(userInputYear); 
String winner= values.get(0); 
+0

一個帶有適當的字段(年,總理等)的自定義類比'ArrayList'更受歡迎。 – Dukeling

+0

感謝您的幫助,但我們不允許使用數組列表和映射,老師對此非常嚴格。 – roro

+0

這個小問題:你假設同一年可能會有超過1個團隊,這很好。然而,你的代碼每次迭代初始化一個新的ArrayList,而不是檢查Map是否已經包含密鑰。 – Mena

0

使用Map。 如果每條線只有一年,請使用HashMap<String, String>,將年份作爲關鍵字,將團隊作爲價值。

如果您有多條年份相同的行,請使用HashMap<String, ArrayList<String>>,將年份作爲關鍵字,團隊* s *作爲值。

在後一種情況下,您必須確保該值已初始化。如果不是,則將其初始化並添加到當前團隊中。如果它已經被初始化,您可以逐年獲得價值並將當前團隊添加到它。

一旦你的用戶輸入,就可以查詢您的Map的按鍵...

  • 驗證它包含了用戶的輸入,如果是的話...
  • 中顯示團隊/枚舉每支球隊當年上市
0

你可以做一個類來表示你的數據的記錄

class Data 
{ 
    private String year; 
    private String winner; 

    ... 

    Data(String year, String winner) { ... } 
} 

然後你可以填寫一個地圖,該地圖將一年中的某些數據關聯起來,這使得查找年份變得更容易一些。

Map<String, Data> m = new HashMap<String, Data>(); 

while(kd.hasNext()) 
{ 
    String[] arr = kd.nextLine().split(","); 

    Data d = new Data(arr[0], arr[1]) 

    m.put(arr[0], d); 
} 

但即使你只是有一個List<Data>Data[]等你仍然可以做類似

for (Data d : listOfData) 
{ 
    if (d.getYear().equals(yearToFind)) return d; 
} 

找到當年

+0

不能使用hashmaps :( – roro

1

沒有收藏?堅韌的老師,你到了那裏....

在沒有地圖,你可以嘗試創建一個單獨的getPremiershipChampion方法。

像這樣:

public PremiershipYear getPremiershipChampion (String userYear, String[] kd) { 

while(kd.hasNext()){ 
    String data = kd.nextLine(); 
    String [] values = data.split(","); 
    String year = values[0]; 

    if (userYear.equals(year)) { 
     PremiershipYear py = new PremiershipYear(); 
     py.setWinner(values[1]); 
     py.setRunnerUp(values[2]); 
    // Set whatever you need to here... 
     return py; 
    }  
} 

return null; 
} 

...然後調用它像這樣:

PremiershipYear year = getPremiershipChampion (userYear, kd); 

// Get the winner 
if (year != null) { 
    System.out.println("Winner for "+userYear+"="+year.getWinner()); 
} 

這裏是PremiershipYear類:

public class PremiershipYear { 

    private String winner; 
    private String runnerUp; 
    private String third; 
    private String fourth; 
    private String faCupWinner; 
    private int someScore; 

    public String getWinner() { 
     return winner; 
    } 

    public void setWinner(String winner) { 
     this.winner = winner; 
    } 

    public String getRunnerUp() { 
     return runnerUp; 
    } 

    public void setRunnerUp(String runnerUp) { 
     this.runnerUp = runnerUp; 
    } 

    public String getThird() { 
     return third; 
    } 

    public void setThird(String third) { 
     this.third = third; 
    } 

    public String getFourth() { 
     return fourth; 
    } 

    public void setFourth(String fourth) { 
     this.fourth = fourth; 
    } 

    public String getFaCupWinner() { 
     return faCupWinner; 
    } 

    public void setFaCupWinner(String faCupWinner) { 
     this.faCupWinner = faCupWinner; 
    } 

    public int getSomeScore() { 
     return someScore; 
    } 

    public void setSomeScore(int someScore) { 
     this.someScore = someScore; 
    }  
} 

你可以用這個渣土即將使其更有效率,例如使​​級的水平,但這應該給你一般的想法!

+0

是的,我明白了!謝謝! – roro

+0

還有,這一年,它也說輸出相應的分數和其他所有的東西,所以我的想法是使用平行數組,但我不知道 – roro

+0

感謝您的幫助,感謝它,只需要一些指導,一直被永久卡住。 – roro

相關問題