2016-10-22 138 views
0

私たちの指示では、16桁の数字を取得し、奇数の場所のすべての桁を右から左に合計する必要があります。その後、右から左に偶数桁の数字を合計し、合計を2倍してから、モジュール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

代わりにこれを試してみてください:

  • が持つLong.toString(番号)を使用して、文字列に16桁の番号を変換します。

  • 文字列を文字単位で繰り返し、偶数インデックスと奇数インデックスを追跡します。

  • Integer.valueOf()を使用して各charをIntegerに変換し、それを徐々に追加します。

  • ヴォイラ、あなたはあなたの偶数とオッズサムを持っています。次のステップは簡単です。また

    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; 
} 
関連する問題