2016-05-16 84 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'] ++; 
    }