2016-05-16 77 views
0

我目前正在研究一個小型項目/遊戲,涉及猜測以某個特定字符結尾的單詞。爲了贏得勝利,玩家必須在猜測所有以同一封信結束的三個單詞中擊敗計算機。例如,如果我選擇餅乾,竊笑和圖書館,我會贏,因爲所有3以信結尾。我如何計算數組列表中的重複項?

在我的遊戲中,每個單詞都會在播放時處理,最後一個字符會添加到數組列表中。如果這個字母已經存在於數組列表中,什麼是最有效的檢查和計數方法?我看到一些刪除重複內容的東西,但在我的情況下,我需要能夠識別重複項並確保數組列表中存在3個相同的字符。

+0

哪裏是你的代碼?你試過什麼? –

+0

我不認爲我到目前爲止的代碼是那麼重要。我遇到的唯一困難是計算數組列表中的重複項。我真的沒有嘗試過這部分問題,因爲我不知道從哪裏開始/最好的方法是什麼。我已經考慮創建一個有26個插槽的陣列,我可以根據這個字母來增量(字母「a」需要插槽0/25,字母「c」需要插槽2/25等)但我不確定最好方式是確定字母表中的字符定位。編輯:我沒有添加代碼,因爲他們不會幫我解釋我的情況 – corvonik

回答

1

只要它工作併產生預期的結果,那就沒有問題。另外,您在評論中描述的解決方案可以發揮作用。 也就是說,創建一個26個整數的數組並基於該字母增加它。

可以通過將它轉換爲int來轉換爲int。爲了將它們從0到25進行計算,可以使用(int) (c - 'a')來獲取索引。 (int) ('a' - 'a')是0,(int) ('b' - 'a')是1等..

+0

由於某種原因,當我寫這篇文章,有些東西沒有點擊。我最終做的是採取一個字符數組「字母」(它有一個獨立的字符-z),我通過while循環檢查了字母表中的最後一個字母。在此之後,我把字母位置(0-25),並增加在一個整數數組中的位置,以表示哪個字符有超過1使用。我想我正在尋找的是「.contains」解決方案的陣列和這樣的計數。 – corvonik

0

1)複製數組列表 'a' 到 'B'

2)排序 'B'(這允許步驟#3的一個線性通)

3)通過'迭代來完成b'並跟蹤重複的位置。

4)你成果的基礎上

這種折衷的處理速度的內存使用量(加上保留原有數組列表爲是)想要的任何數學(排序爲N LG N + 1 N通過列表迭代= 2N lg N)

0

您可以使用此代碼如下:

ArrayList<Character> characterArrayList;//Remember init arrayList and add elements... 
    int[] result = new int[26]; 
    for (char c : characterArrayList){ 
     result[c - 'a'] ++; 
    }