2015-10-13 4 views
0

Я новый студент программирования и я пытаюсь от записи алгоритма в Java, который выполняет следующие действия:Как добавить номера кредитных карт, используя алгоритм Лун в

Графов каждый цифру номера кредитной карты (начиная со второй до последней цифры) и умножает каждую цифру на две.

Возьмите полученные целые числа и сложить все цифры вместе (то есть, если у меня 14, 6 и 2, я хотел бы добавить 1 + 4 + 6 + 2)

То, что я до сих пор:

  for(i = creditCard.length() - 2; i >= 1; i = i - 2){ 
      int x = Integer.parseInt(creditCard.substring(i,i+1)); 
      String y = Integer.toString(x); 

       for(j = 0; j < y.length() - 1; j++){ 
       int z = Character.getNumericValue(y.charAt(j)); 
       unselectedSum = unselectedSum + z; 
      } 
      } 

Это возвращает 0 в качестве unselectedSum.

Снова, мои знания в программировании очень ограничены, поэтому я был бы признателен за любую помощь, которую я мог получить!

+0

Указатель для дальнейшего исследования. Обычно это происходит, если вы пытаетесь получить доступ к местоположению массива/строки за ее пределами. – Pavan

+0

может предоставить полный журнал stacktrace вместе с полным кодом, который вы внедрили –

ответ

2

Я надеюсь, что вы инициализирован переменную unselectedSum на 0, как:

int unselectedSum = 0; 

Что я могу видеть из фрагмента кода является несколько ошибок, которые вы, вероятно, не намерены делать. Я объясню это на примере.

String creditCard = 1234567812345678; 

Для первой итерации внешнего цикла, creditCard.substring(i,i+1) вернется 7, так как метод String.substring(int beginIndex, int endIndex) возвращает строку, начиная с beginIndex и заканчивая endIndex-1, оба включительно.

Далее, во внутреннем цикле вы просите цикл работать до j < y.length() - 1.

Теперь, поскольку длина y равна 1, поэтому условие сводится к j<0, которое никогда не является истинным и, следовательно, цикл никогда не запускается. Вот почему значение unselectedSum не меняется в программе.

Вот альтернативный подход к проблеме:

int unSelectedSum = 0; 

for(int i = 1; i<creditCard.length(); i=i+2) { 

    //first we will take every even-placed digit. 
    int evenDigit = Character.getNumericValue(creditCard.charAt(i)); 

    //next, we will multiply it by 2 
    evenDigit = evenDigit*2; 

    //And finally, we will add the digits to unselectedSum 
    if(num/10 == 0) { 
     unselectedSum = unselectedSum + evenDigit; 
    } 
    else { 
     unselectedSum = unselectedSum + evenDigit/10 + evenDigit%10; 
    }   
} 
Смежные вопросы