在java中计算偶数位数和奇数位数之和时出错

时间:2016-10-22 02:32:31

标签: java

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

2 个答案:

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