在我们的指示中,我们必须获得一个16位数字,然后将所有数字从右到左加在奇数位。之后,我们必须从右到左求和所有偶数位,将总和加倍,然后取模块9。当我尝试运行我的代码时,即使使用有效的信用卡,我也会不断收到“无效”数。
public static boolean validateCreditCard(long number) {
double cardSum = 0;
for (int i = 0; i < 16; i++) {
long cardnumber = (long) Math.pow(10, i);
double oddPlaceSum = 0;
double evenPlaceSum = 0;
if (i % 2 != 0) {
oddPlaceSum += ((int)(number % cardnumber / (Math.pow(10, i))));
} else { // so if i%2 ==0
evenPlaceSum += ((int)(number % cardnumber / (Math.pow(10, i)) * 2 % 9));
}
cardSum += evenPlaceSum + oddPlaceSum;
}
if (cardSum % 10 == 0) {
return true;
System.out.println("Valid");
} else {
return false;
System.out.println("Invalid");
}
}
最佳答案
试试这个代替:
使用Long.toString(number)将16位数字转换为字符串。
逐个字符地遍历String字符,并跟踪偶数和奇数索引。
使用Integer.valueOf()将每个char转换为Integer,从而逐步添加它们。
瞧,您得到了evenSum和oddSum。下一步应该很简单。
public static boolean validateCreditCard(long number){
String x = Long.toString(number);
int evenSum = 0;
int oddSum = 0;
for(int i=0; i<x.length; i=i+2) {
oddSum += Integer.valueOf(s[i]);
evenSum += Integer.valueOf(s[i+1]);
}
//Do the next steps with odd and even sums.
另外,请适当处理IndexOutOfBoundsException。
关于java - 在Java中计算偶数位和奇数位之和时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40187753/