java—计算字符总数

yhxst69z  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(250)

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

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

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

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

方法返回的上述结果为 3 ( z , t 以及 w )在我的代码中,我没有得到想要的结果。

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;
        }
kxe2p93d

kxe2p93d1#

创建一个字符数组来保存唯一的字符。每次找到不是“.”或“|”的字符时,将其与数组中的每个字符进行比较,如果不匹配,则将其添加到数组中并增加计数。下面是一些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;
}
ffscu2ro

ffscu2ro2#

我会用一个 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();
}

此解决方案假定 . 以及 | 是唯一要排除的两个字符。如果你想只数字母(或字母和数字),那么请更新你的问题陈述。

trnvg8h3

trnvg8h33#

问题是,您试图循环循环中的每个字符,甚至不检查它们是否已计数:
您需要做的是创建一个数组来保存已计数的字符:
下面的示例不使用任何集合框架。

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;
        }

相关问题