2011-11-06 74 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个输出回路