2015-07-04 2 views
2

Я нахожусь в классе Intro to Java, и у меня возникли проблемы с написанием алгоритма контрольной суммы для программы проверки кредитной карты. Требования:Проверка валидации на номер кредитной карты

  • Начиная со второй цифры справа и справа налево, удваивайте каждую цифру; если итоговое число больше или равно 10, вычтите 9. Добавьте каждое результирующее число вместе.
  • Затем, начиная с последней цифры справа и действуя справа налево, добавьте каждую цифру в общее число, используемое на предыдущем шаге.
  • Если итоговое итоговое значение равномерно делится на 10, номер кредитной карты действителен.
  • При кодировании этого алгоритма имейте в виду, что не все номера кредитных карт имеют одинаковое количество цифр.

Также указано, что для его завершения необходимо использовать петлю (петли). Я понимаю, что мне, вероятно, понадобится цикл for, но я просто зациклился на том, как закончить его. Это то, что у меня есть:

public static boolean isValidNumber(String cardNumber) { 
     //your code here 
     int i, checkSum = 0; 

     // Compute checksum of every other digit starting from right-most digit 
     for (i = cardNumber.Length - 1; i >= 0; i -= 2) { 
      checkSum += (cardNumber[i] - '0'); 
     } 

     // Now take digits not included in first checksum, multiple by two, 
     // and compute checksum of resulting digits 
     for (i = cardNumber.Length - 2; i >= 0; i -= 2) { 
      int val = ((cardNumber[i] - '0') * 2); 
      while (val > 0) { 
       checkSum += (val % 10); 
       val /= 10; 
      } 
     } 

     // Number is valid if sum of both checksums MOD 10 equals 0 
     return ((checkSum % 10) == 0); 
    } 

Я получаю ошибки на обоих циклах. Любая помощь?

+0

Your для петель с помощью ту же переменную ('i'), изменить вложенный цикл for, чтобы использовать что-то вроде for (int j = cardNumber.Length - 2; j> = 0; j - = 2) – Andrew

+0

@Andrew спасибо! Однако я все еще получаю ошибки, которые говорят «требуется массив, но String found», где у меня есть [i] и [j] .. знаете ли вы, как я мог это исправить? – badluckbowers

ответ

0
  • Чтобы найти длину строки использовать string.length() не string.length
  • Чтобы получить символ из строки при заданном использовании индекса string.charAt(index)

    public static boolean isValidNumber(String cardNumber) { 
    //your code here 
    int i, checkSum = 0; 
    
    //To find the length of the string use string.length() not string.Length 
    for (i = cardNumber.length() - 1; i >= 0; i -= 2) { 
        //to get char from a string at a given position use string.charAt(index) 
        checkSum += (cardNumber.charAt(i) - '0'); 
    } 
    
    for (i = cardNumber.length() - 2; i >= 0; i -= 2) { 
        int val = ((cardNumber.charAt(i) - '0') * 2); 
        while (val > 0) { 
         checkSum += (val % 10); 
         val /= 10; 
        } 
    } 
    
    // Number is valid if sum of both checksums MOD 10 equals 0 
    return ((checkSum % 10) == 0); 
    }