0

コード内のコンパイル/構文エラーが何であるかを理解するのに苦労しています。

public class CreditCardValidation {

    public static void main (String[] args){

        System.out.print(prefixMatched(4388576018402626, 4388));

    }

    /*
    Return the number of digits in d
    */

    public static int getSize(long d) {

        int size = 0 ;

        while( d > 0 ) {
            d = d / 10 ;
            size = size + 1 ;       
        }
        return size ;
    }

    /*
    Return the first k number of digits from number. If the number of digits in number is 
    less than k, return the number.
    */

    public static long getPrefix(long n, int k) {

        int f = getSize(n)-k;

        long prefix = n/((int)(Math.pow(10, f)));

        return prefix;
        }

    /*
    Return true if the digit d is a prefix for number.
    */

    public static boolean prefixMatched( long number, int d ) {

        if ( d == getPrefix(number, 4))

            return true ;
        else
            return false ;

        }

    }

ご覧のとおり、prefixMatched を呼び出して、クレジット カード番号が要件を満たしているかどうかを確認しようとしています。数字 d が数値のプレフィックスである場合。ただし、コンパイラから返される唯一のものは次のとおりです。

"CreditCardValidation.java:6: integer number too large: 4388576018402626
        System.out.print(prefixMatched(4388576018402626, 4388));


                               ^"

初めての投稿なので質問が漠然としていてすみません。

4

5 に答える 5

1
  1. 定数 (CC 番号) が long であることをコンパイラに示す必要があります。定数の末尾にLを付けます。
  2. 実際には、CC 番号を文字列として扱い、charAt(x) を使用してチェック ディジットを計算する方が少し簡単です。
于 2013-10-28T16:09:37.810 に答える
0

Long代わりに 使用する必要がありますInteger

int:デフォルトでは、int データ型は 32 ビットの符号付き 2 の補数整数で、最小値は -231、最大値は 231-1 です。Java SE 8 以降では、 int データ型を使用して、最小値が 0 で最大値が 232-1 の符号なし 32 ビット整数を表すことができます。int データ型を符号なし整数として使用するには、Integer クラスを使用します。compareUnsignedなどの静的メソッドdivideUnsignedが Integer クラスに追加され、符号なし整数の算術演算がサポートされました。

long:データlong型は 64 ビットの 2 の補数整数です。signed long の最小値は -263、最大値は 263-1 です。Java SE 8 以降では、最小値が 0 で最大値が 264-1 の符号なし 64 ビット long を表現するために long データ型を使用できます。unsigned long の最小値は 0 で、最大値は 264-1 です。int によって提供される値よりも広い範囲の値が必要な場合は、このデータ型を使用します。LongcompareUnsignedクラスには、divideUnsignedunsigned long の算術演算をサポートする などのメソッドも含まれています。

回避するには、次を使用する必要がありますexception

System.out.print(prefixMatched(4388576018402626L, 4388));

は、L与えられた値が であることを示しますlonglどちらでも使えますが、 コードを見ながら品よく見えるのでL私はこちらを使っています。L

出典:オラクルのドキュメント。

于 2013-10-28T16:09:28.300 に答える