2012-02-06 78 views
2

我想使用MaxFriends方法查找擁有最多朋友的人。從鏈表中打印朋友的數量很容易,但由於我在while循環的每次迭代後清除它,我不知道如何比較最後的值...在大多數數據中查找.txt文件中的行

我認爲問題可能如果我剛剛找到最多'代幣'的字符串,或者在這種情況下是字符串,那就簡化了。有沒有辦法做到這一點?

我在閱讀文本文件(創建鏈接列表)。

文本文件看起來像這樣:

john, peter, maria, dan, george, sonja 
maria, nell, ted, don, matthew, ann, john, george 
fred, steve 
ann, tom, maria 

代碼迄今:

+0

聽起來像是一個很好的應用程序的最大堆。 – 2012-02-06 01:41:33

回答

0

爲什麼不使用HashMap,用於存儲每個朋友的基礎

Map<String, List<String>> friends = new HashMap<String, List<String>>(); 

信息後每次迭代都使用好友名稱作爲散列表中的關鍵字,然後將鏈接列表添加到地圖中價值。

然後,在maxFriends中,您將能夠通過密鑰並獲取值並驗證哪個列表具有最大尺寸,因此也是最友好的。

2

如果我正確地理解了這個問題,您只需要跟蹤到目前爲止最多的朋友,並將其與每行的下一位候選人進行比較。將所有內容填入地圖或堆似乎都是不必要的。

順便問一下,你正在做的分析很簡單,並不需要一臺掃描儀:

String[] friends = line.split(",\\s*"); 
System.out.printf("%s has %d friends\n", friends[0], friends.length - 1); 
+0

清潔和簡單。打印好每個人的朋友之後,您只需要將代碼放到所有行中的最大朋友身上。我可以建議將朋友的姓名和他的相應的朋友人數存儲在散列圖中並對其進行排序嗎? – 2012-02-06 02:57:57

1

我改變你的代碼的一部分插入有點像如下:

int maxFriendCount = 0; // added by me 
String maxLeader = null; // added by me 
while (scanner.hasNextLine()) { 
    int friendCount = 0; 
    String line = scanner.nextLine(); 
    Scanner lineScan = new Scanner(line); 
    lineScan.useDelimiter(", "); 
    // System.err.println("The line that was scanned: " + line); 

    String leader = lineScan.next(); 

    while (lineScan.hasNext()) { 
     list.add(lineScan.next()); 
     friendCount++; 
    } 
    // Added by me 
    if(friendCount > maxFriendCount) 
    { 
     maxFriendCount = friendCount; 
     maxLeader = leader; 
    } 
    System.out.println("Friend Leader: " + leader + "\n" + 
       "\tFriends include: " + list.toString() + "\n" + 
       "\tNumber of Friends: " + list.size() + "\n"); 
    list.clear(); 
} 

while循環結束後,您可以獲得最多朋友的領導。