Я работаю над заявкой на подтверждение номера кредитной карты.
Я могу ввести либо действительный номер, либо недействительный, но вывод никогда не принимает данные и не считывает их действительными. Я пытаюсь понять, каков правильный алгоритм проверки кредитной карты.
Ниже мой желаемый результат. Мне нужно знать, в какой точке моего цикла или моего использования long vs. string я ошибаюсь, что приведет к тому, что вывод всегда будет считаться недействительным.
Образец 1:
Enter a credit card number: 4246345689049834
4246345689049834 is invalid
Образец 2:
Enter a credit card number: 4388576018410707
4388576018410707 is valid
Однако в моем коде я получаю следующий вывод
Образец 1:
Enter a credit card number: 4246345689049834
4246345689049834 is invalid
Образец 2:
Enter a credit card number: 4388576018410707
4388576018410707 is invalid
Код:
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("Enter Credit Card Number for Validation: ");
long number = input.nextLong();
long total = sumOfEvenPlaces(number) + sumOfOddPlaces(number);
if (isValid(total)) {
System.out.println(number + " is valid");
} else {
System.out.println(number + " is invalid");
}
}
public static boolean isValid(long total) {
if (total % 10 == 0) {
return true;
}
return false;
}
public static int sumOfEvenPlaces(long number) {
int sum = 0;
int remainder;
number %= 10;
while (number % 10 != 0 || number / 10 != 0) {
remainder = (int) (number % 10);
sum = sum + getDigit(remainder * 2);
number /= 100;
}
return sum;
}
public static int getDigit(int number) {
if (number > 9) {
return (number % 10 + number / 10);
}
return number;
}
public static int sumOfOddPlaces(long number) {
int sum = 0;
int remainder;
while (number % 10 != 0 || number / 10 != 0) {
remainder = (int) (number % 10);
sum = sum + getDigit(remainder);
number /= 100;
}
return sum;
}
}




У вас есть ошибка в методах sumOfEvenPlaces() и sumOfOddPlaces().
В sumOfEvenPlaces(long number) нужно поменять
number %= 10;
к
number /= 10;
Вы можете пропустить цифру только с помощью числа / 10, а не числа% 10
И в обеих функциях меняем
while (number % 10 != 0 || number / 10 != 0)
к
while (number > 0)
при использовании while (число> 0) цикл будет работать до тех пор, пока не будут обработаны все цифры числа.
Попробуйте эти модифицированные методы, это будет работать: -
public static int sumOfEvenPlaces(long number) {
int sum = 0;
int remainder;
number /= 10; // change 1
while (number > 0) { // change 2
remainder = (int) (number % 10);
sum = sum + getDigit(remainder * 2);
number /= 100;
}
return sum;
}
public static int sumOfOddPlaces(long number) {
int sum = 0;
int remainder;
while (number > 0) { // change 3
remainder = (int) (number % 10);
sum = sum + getDigit(remainder);
number /= 100;
}
return sum;
}
Выход :-
Enter Credit Card Number for Validation:
4246345689049834
4246345689049834 is invalid