-1

私の割り当てから引用:この質問の目的は、(a)選択構造を実践すること(b)反復構造を適用すること(c)文字列を操作することです

do {
    System.out.print("Enter MC for MasterCard or VISA for VISA card: ");
    cardType = scn.next();
} while (!cardType.equals("MC") && !cardType.equals("VISA"));
if (cardType.equals("MC")) {
    do {
        System.out.print("Enter MasterCard card no.: "); // Get input:
                                                            // mastercard
                                                            // number
        cardNo = scn.nextLong();
        cardLength = Long.toString(cardNo).length(); // Get length of
                                                        // mastercard
                                                        // number input
        dbUserPrefix = cardNo / java.lang.Math.pow(10, 14);
        intUserPrefix = (int) dbUserPrefix;
        for (int i = 0; i <= 5; i++) {// for validating prefix
            // 4 possibilities
            if (intUserPrefix == cardPrefix[i]) {
                if (cardLength == 16) { // Prefix & length correct                      break;
                } else { // Prefix correct, length wrong
                    state = 1;
                    break;
                }
            } else {
                if (cardLength == 16) { // Prefix wrong, length correct                     state = 2;
                } else { // Prefix & length incorrect
                    state = 3;
                }
            }
        }
        if (state == 0) {
            System.out.println("SUCESS");
        } else if (state == 1) {
            System.out.println("Your length of card number is incorrect.");
        } else if (state == 2) {
            System.out.println("Your card prefix is incorrect.");
        } else {
            System.out.println("Your card prefix and length of card number is incorrect.");
        }
        break;
    } while (cardLength != 16);
}

ここで必要な主なものは、クレジット カードの正しいプレフィックスが 51、52、53、54 または 55 であること、および正しい長さが 16 (桁数) であることを検証するプログラムです。検証が失敗した場合は、エラーを出力する必要があります。問題は、prefix==51 以外に、試した残りのプレフィックスが state==2 になることです。

4

1 に答える 1

2

私はこれについて別の方法で行きます。入力 (カード番号) を long として受け取ります。文字列として受け取った場合、この種の検証を行う方が簡単だと思います。

長さを検証するにcardNumは、 は文字列型です。

boolean isValidLength = (cardNum.length() == 16);

プレフィックスを取得するには:

String prefix = cardNum.substring(0,2); // gets first two digits of cardNum

検証するには、有効なプレフィックスをすべてリストに入れて呼び出します.contains()

List<String> validPrefixes = new ArrayList<String>();
validPrefixes.add("52");
// ... etc

boolean isValidPrefix = validPrefixes.contains(prefix);

次に、ロジックは次のようになります。

  1. ユーザーに番号を要求する
  2. 入力を文字列として受け取る
  3. 入力の長さが正しいことを確認してください。そうでない場合はエラーを返します
  4. プレフィックスが正しいことを確認してください。そうでない場合はエラーを返します
  5. 成功を返す
于 2012-08-16T20:44:31.247 に答える