在我们的指示中,我们必须获得一个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");
}
}
答案 0 :(得分:0)
请改为尝试:
使用Long.toString(数字)将16位数字转换为字符串。
逐字符串地逐字符号,并跟踪偶数和奇数索引。
使用Integer.valueOf()将每个char转换为Integer,从而逐步添加它们。
Voila,你得到了你的偶数和奇数。接下来的步骤应该是微不足道的。
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。
答案 1 :(得分:0)
您可以在单个while循环中执行此操作,因为数字是固定的,如下所示:
int digit,evensum,oddsum;
int i=16;
while(i > 0){
digit=number%10;
if(i%2 == 0)
evensum+=digit;
else
oddsum+=digit;
i--;
digit/=10;
}