信用卡长/字符串验证[关闭]
Posted
技术标签:
【中文标题】信用卡长/字符串验证[关闭]【英文标题】:Credit Card Long/String Validation [closed] 【发布时间】: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?。 您的问题可以通过您的步进调试器快速轻松地得到解答。在使用 *** 之前,您应该始终尝试使用分步调试器解决您的问题。 如果您要求其他人运行您的代码,请在分步调试器中调试并为您修复它,您应该知道这是不是网站的工作方式。我在其他 cmets 中发布的链接对此进行了解释。 为我调试代码转储也不是问题 【参考方案1】:sumOfEvenPlaces()
和 sumOfOddPlaces()
方法都有错误。
在sumOfEvenPlaces(long number)
你必须改变
number %= 10;
到
number /= 10;
您只能使用数字 / 10 而不是数字 % 10 跳过一个数字
并且在这两个函数中都发生了变化
while (number % 10 != 0 || number / 10 != 0)
到
while (number > 0)
通过使用 while (number > 0) 循环将一直工作,直到处理完 number 中的所有数字。
尝试这些修改后的方法,这会奏效:-
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
【讨论】:
以上是关于信用卡长/字符串验证[关闭]的主要内容,如果未能解决你的问题,请参考以下文章