在我们的指示中,我们必须获得一个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/

10-10 12:44