2015-01-23 2 views
1

Этот вопрос базируется на эту тему Programming Riddle: How might you translate an Excel column name to a number?Зачем нужно многократно вычитать на 1?

Вот код от этого вопроса, чтобы перевести номер столбца с именем первенствовать колонки

public String getColName (int colNum) { 

    String res = ""; 
    int quot = colNum; 
    int rem;   
    /*1. Subtract one from number. 
    *2. Save the mod 26 value. 
    *3. Divide the number by 26, save result. 
    *4. Convert the remainder to a letter. 
    *5. Repeat until the number is zero. 
    *6. Return that bitch... 
    */ 
    while(quot > 0) 
    { 
     quot = quot - 1; 
     rem = quot % 26; 
     quot = quot/26; 

     //cast to a char and add to the beginning of the string 
     //add 97 to convert to the correct ascii number 
     res = (char)(rem+97) + res;    
    } 
    return res; 
} 

Я тестировал этот код полностью и он работает, но у меня есть вопрос о том, что нужна эта линии должны быть повторено для этой работы

  quot = quot - 1; 

из моего понимания Quot необходимо сопоставить число Col дистанцироваться от «а». Это означает, что 1 должен отображаться на расстоянии 0 от 'a', от 2 до 1 расстояния от 'a' и т. Д. Но разве вам не нужно вычитать это один раз, чтобы объяснить это? Не в цикле я имею в виду в конечном счете,

  quot = quot/26; 

остановит цикл.

+0

Предположительно, исходное значение было сформировано путем объединения значений в диапазоне 1..26, а не 0..25. –

+0

, но это 0 ... 25, потому что вы выполняете эту операцию rem + 97, расстояние от 'a'. – committedandroider

ответ

4

Столбцы Excel не являются нормальной системой номеров. Это не только основание 26. Первый двухзначный столбец - «AA». В любой системе нормальных чисел первое двузначное число состоит из двух разных цифр. В принципе, при нумерации столбцов excel нет цифры «нуля».

Для учета этой разницы на каждой итерации вычитается 1.

+0

Я согласен с нулевой цифрой. Вот почему я понимаю, если вы пройдете в 26, вычтите, что на 1, чтобы получить 25, расстояние от «a». Но разве это не все время, которое вам нужно для этого. Для меня вам нужно только один раз учитывать это. Можете ли вы это прояснить? – committedandroider

+0

Как вы представляете расстояние 26 в столбцах excel? Это «АА». Первый «A» вносит ненулевое расстояние, но второй «A» действует как конечный «ноль». Во всех местах, кроме последнего, «А» означает некоторое положительное значение. Вычитание поправок для этого. – recursive

+0

То, как я вижу это, было расстояние в базе 26. Увидев, что 26/26! = 0, это означает, что это расстояние займет еще одну мощность 26 для представления. Вот почему для меня смысл. То, что не имеет смысла, в следующем проходе, будет равно 1. Если я уже позаботился о нулевой нулевой нумерации, почему мне нужно снова вычитать 1? – committedandroider