1

如何在号码中找到最受欢迎的数字。例如我有数字 222244,出现次数最多的数字是 2。请帮忙。

我有类似的东西,但不太了解方法的第一部分,int j = liczba.charAt(i) - 47; 为什么 47 在这里?谁能解释一下?

int digits[] = new int [10];         
for(int i = 0; i <liczba.length(); i++){
    int j = liczba.charAt(i) - 47;
    digits[j]++;
}

int digit = 0; 
int count = digits[0];
for(int i=1;i <10; i++){
    if(digits[i] >count){
        count = digits[i];
        digit = i;
    }
}
return digit;
4

1 回答 1

1

线

int j = liczba.charAt(i) - 47;

将第 (i+1) 个字符的字符代码减去liczba47。参考ASCII 表,47 映射到“/”,其 ASCII 代码比“0”小一。

请注意,我假设以下内容,因为您的代码似乎是在 Java 中。

  • 字符串索引从零开始,即第一个字符的索引为 0,第二个字符的索引为 1,依此类推
  • 字符和整数似乎可以互换使用,因为字符在内部由整数表示,即字符的 ASCII 码。
  • 也就是说,该char类型实际上是整数类型,范围较小

因此,此代码是将字符“0”转换为整数 1,将“1”转换为整数 2,等等。

例如,当第一个字符 ( liczba.charAt(0)) 是 character0时, liczba.charAt(0)返回 character '0',它也等于 number 48-- 因为'0'它的 ASCII 码是 48。

用 47 减去 48 得到 1,因此它将字符 ' 0' 转换为整数 1。

但是,此代码似乎可能导致数组索引越界错误(假设从零开始的数组索引)。当数字为 时'9',此行返回 10。这将导致上述错误。除非此代码的语言数组是从 1 开始的。然而,即使在这种情况下,这条线

int count = digits[0];

只会失败。此代码似乎因常见的Off 错误而失败

我相信这条线实际上应该读

int j = liczba.charAt(i) - 48;

使该字符'0'转换为数字 0。

如果这仍然打扰您,您可以将此行更改为

int j = liczba.charAt(i) - '0';

所以会更清楚。减去的代码'1'和代码'0'得到整数1,足够清楚:)

于 2013-08-17T13:53:02.590 回答