计算字符总数

时间:2015-04-28 03:13:52

标签: java

如果我有以下char类型的2D对象:

aaaa...||
bbb..|ccc
ddddd..|d

方法countChars()返回不同字母的数量,即在上面的示例中,返回的结果为4,因为有a,b,c,d个字符。它不计算每个字符(计数时不包括'.''|')但计算数组中不同字符的数量。另一个例子:

zzz.zz||
....tt|.
wwwwwwww

该方法返回的上述结果为3ztw) 在我的代码中,我没有得到理想的结果。

 public int countChars()
        {
            char originalChar = 0;
            char anotherChar = 0;
            int count = 0;
            for(int r = 0; r < height; r++)
            {
                for(int c = 0; c < width; c++)
                {
                    if(space[r][c] != '.' || space[r][c] != '|')
                    {
                        space[r][c] = originalChar;
                    }
                    count++;
                    space[r][c] = originalChar;
                }

            }

            return count;
        }

3 个答案:

答案 0 :(得分:2)

我会使用Set来处理这个问题,因为它消除了重复计算的问题。

public int countChars() {
    Set<Character> set = new HashSet<Character>();

    for (int r = 0; r < height; ++r) {
        for (int c = 0; c < width; ++c) {
            if (space[r][c] != '.' && space[r][c] != '|') {
                set.add(new Character(space[r][c]));
            }
        }
    }

    return set.size();
}

此解决方案假定.|是您要排除的唯一两个字符。如果您考虑到只计算字母(或字母和数字),请更新您的问题陈述。

答案 1 :(得分:1)

问题是你试图循环循环中的每个字符,甚至没有检查它们是否已被计算:

你需要做的是创建一个数组来保存已经计算过的char:

下面的示例没有使用任何集合框架。

public int countChars()
        {
            char originalChar = 0;
            char anotherChar = 0;
            int count = 0;
            char [] countedChar = new char[255] //max char array
            for(int r = 0; r < height; r++)
            {
                for(int c = 0; c < width; c++)
                {
                    if(space[r][c] != '.' || space[r][c] != '|')
                    {
                        space[r][c] = originalChar;
                        continue; 
                    }

                    if(countedChar[space[r][c]] != null) continue; //if char is already counted then continue;

                    countedChar[space[r][c]] = 's'; //add the index of the char array as the char number.

                    count++;
                    space[r][c] = originalChar;
                }

            }

            return count;
        }

答案 2 :(得分:0)

创建一个包含唯一字符的字符数组。每次你来到一个不是'。'的char。还是一个'|'将它与数组的每个字符进行比较,如果没有匹配项,则将其添加到数组中并增加计数。这是一些psudo代码。

char[] uniqueChars = new char[26];
boolean unique = true;
int count = 0;
while(!at the end of the arrays){
    char c = next character in the arrays;
    for(int i = 0; i<count; i++){
        if(uniqeChars[i]==c){
            unique = false
        }
    }
    if(unique){
        uniqueChars[count] = c;
        count++;
    }
    unique = true;
}