2013-08-17 7 views
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; 
+0

Не забудьте пометить его языком, который вы используете. –

ответ

1

Линия

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

Вычитание код символа из (I + 1) -го символа liczba по 47. Ссылаясь на ASCII table, 47 карт с "/", чьи ASCII-код на единицу меньше чем «0».

Обратите внимание, что я предполагаю следующее, так как ваш код находится на Java.

  • Строка индексов начинается с нуля, т.е. первый символ имеет индекс 0, второй символ имеет индекс 1, и так далее
  • Кажется, что символы и целые числа могут быть использованы взаимозаменяемо, так как символ внутренне представлен целым числом , а именно код ASCII символа.
  • Тем не менее, char тип фактически целочисленный тип, с меньшим диапазоном

Следовательно, этот код, чтобы включить символы «0» до целого числа 1, «1» до целого числа 2, и т.д.

Например, когда первый символ (liczba.charAt(0)) является символом 0, liczba.charAt(0) возвращает символ '0', который также равен числу 48 - потому что '0' имеет ASCII-код 48.

Вычитание 48 с 47 получает 1, поэтому было бы преобразовать символ «0» в целом число 1.

Однако, кажется, что этот код может вызвать индекс массива из погрешности оценок (предполагая индексы массива нулевой основы). когда цифра равна '9', эта строка возвращает 10. Это приведет к вышеупомянутой ошибке. Если массив языка этого кода не основан на 1. Однако даже в этом случае эта линия

int count = digits[0]; 

просто потерпит неудачу. Этот код, кажется, не в состоянии с общим Off by one error

Я считаю, эта линия должна на самом деле читать

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

так, что символ '0' преобразуется номер 0.

Если это по-прежнему беспокоить вас, вы можете изменить эта линия до

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

поэтому было бы яснее. Вычтите код '1', а код '0' доставит вам целое число 1, достаточно ясно :)

+0

вы правы, должно быть 48. Но я действительно не понимаю. :( – dzoni

Смежные вопросы