2016-10-22 200 views
0

在我们的指令中,我们必须得到一个16位数字,然后将奇数位置的所有数字从右到左加起来。之后,我们必须将所有偶数位数字从右到左,总和加倍,然后取模块9.当我尝试运行我的代码时,即使它使用的是有效的信用卡,我仍然会收到“无效”数。计算java中偶数位数字和奇数位数的总和时出错

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

这不是有效的Java(可达语句)。 – xehpuk

回答

0

尝试此代替:

  • 转换的16位数字成使用Long.toString(号码)的字符串。

  • 按字符迭代字符串并跟踪偶数和奇数索引。

  • 使用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异常合适。

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; 
}