【发布时间】:2019-01-12 08:23:34
【问题描述】:
我正在处理信用卡号验证应用程序。
我可以输入有效数字或无效数字,但输出永远不会输入数据并将其读取为有效数字。我正在尝试找出验证信用卡的正确算法。
以下是我想要的结果。我需要知道循环的哪一点,或者我对 long 与 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;
}
}
【问题讨论】:
-
What does your step debugger tell you?。 您的问题可以通过您的步进调试器快速轻松地得到解答。在使用 StackOverflow 之前,您应该始终尝试使用分步调试器解决您的问题。 如果您要求其他人运行您的代码,请在分步调试器中调试并为您修复它,您应该知道这是不是网站的工作方式。我在其他 cmets 中发布的链接对此进行了解释。 为我调试代码转储也不是问题
标签: java string validation credit-card