public static void main(String[] args) {
int count = 0;
char[] array = {'а', 'g', 'r', 'e', 'r', 's', 'a', 'х', 'ј', 'a'};
//char[] array = {'p', 'a', 'а', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'а'};
//char[] array = {'a', 'b', 'b', 'c', 'k', 'a', 'a'};
for (int i = 0; i < array.length; i++) {
if (array[i] == 'a') {
count++;
}
//System.out.println(count);
}
System.out.println("Letter 'a' " + count + " times.");
}
我在这里有一些“特定”问题。 如果我检查第一个数组,结果是2而不是3。 如果我检查第二个数组,结果是8而不是10。 当我检查第三个数组时,一切正常。
您可以取消注释System.out.println(count);
行,并以奇怪的方式看待错误计数。
我想知道是什么问题。
先谢谢了。 问候。
答案 0 :(得分:9)
第一个'а
'不是a
。
http://unicode.scarfboy.com/?s=%D0%B0
它是CYRILLIC SMALL LETTER A
(编码为U+0430
),与a
(编码为U+0061
,名称为LATIN SMALL LETTER A
)不同通常在拉丁字母中使用。 Java没错,实际上有两个元素是拉丁语a
并在拉丁语a
的代码点编码。
在第二个数组中,此问题仍然存在,至少在第二个数组的第二个“ a
”处仍然存在。
之所以出现,是因为如上所述的字符评估是通过比较代码点完成的(这也是char
类型可以被视为整数的原因)。在幕后,计算机基本上是在问自己61是否是430,这显然是不正确的。