2011-11-06 71 views
-2

場景:您已提供一個包含一天捕獲記錄的ascii文本文件。 文件中的每一行包含一個「冒號分隔」帶有三個字段捕獲記錄:StringTokenizer和HashMap(需要邏輯)

CONTESTANTS_NAME:FISH_TYPE:FISH_WEIGHT 

例如

PETER:TUNNY:13.3 

其指示被叫PETER競爭者得了金槍魚稱重13.3公斤。注意 PETER可能在當天捕獲了一條以上的魚。

如何使用java的內置類Tokenizer和HashMap來解決這個問題?

你的設計應該提供以下分析:

  1. 魚的每種類型抓到當天的總重量。
  2. 每個參賽者捕獲的魚的總重量。
  3. 排名前三的競爭對手按總捕撈量排名。

原因我張貼這是第一眼我有點慌知道任何地圖只包含一個鍵值對,不知道如何解決這個問題,因爲它有三個字段。我所做的是有兩個HashMaps,第一個使用了CONTESTANT-NAME鍵,第二個鍵是FISH_NAME,並且能夠提供所需的分析:這需要多個循環,我不確定這是否是一種很好的編程方式。如果有人有更好的方法,請讓我知道。我只需要邏輯。

回答

1

你可能想看看錶類,如Guava Table(將其視爲二維地圖)。然後,您可以使用CONTESTANT_NAME作爲第一個鍵,FISH_NAME作爲第二個鍵,並將權重用作存儲值。

番石榴表甚至僞裝做稀疏表,所以我強烈建議你試試看。

0

你可以做HashMap的

Double contestantTotal = contestantMap.get(contestant); 
if(contestantTotal ==null)contestantTotal = Double.getValue(0);//if it wasn't already in the map the returned value will be null 
contestantTotal += weight; 
contestantMap.put(contestant,contestantTotal);//put overwrites the previous values 

Double fishTypeTotal = fishTypeMap.get(fishType); 
if(fishTypeTotal ==null)fishTypeTotal = Double.getValue(0); 
fishTypeTotal += weight; 
fishTypeMap.put(fishType,fishTypeTotal); 

一個GET /更新/認沽組合這隻需要3個迴路一個輸入環和2個輸出迴路