Coding_Gamesメモ_Credit_Card_Verifier_(Luhn’s_algorithm)

Coding_GamesメモCredit_Card_Verifier(Luhn’s_algorithm)

javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:

System.err.println( );

を使うとデバックしやすくなる。(エラー出力は評価に影響しない)

内容

カード番号のチェック

ルール

Luhnアルゴリズムを使いカード番号に入力間違いがないかチェックを行う

Luhnアルゴリズムの手順

  1. 右から数えて偶数番目の桁の数字を2倍する (2桁になる数字の最大値は9*2=18なので-9することで先に計算しておける1+8=9 ,18-9=9)
  2. 1 で出てきた数字を1桁ずつ全て足す
  3. 右から数えて奇数番目の桁の数字を1桁ずつ全て足す
  4. 2 と3 で出てきた数を足す
  5. 4 の数が10で割り切れる場合、カードの番号は正しい

インプット

1行目 チェックするカードの数 (N)
2行目から 4桁区切りのカード番号の文字列

アウトプット

カード番号が正しいかをYESNO で出力

使用したクラス

Integer

(static int) = Integer.parseInt(str)
数字を表す文字列str をint に変換する
valueOf との違いはparseInt は基本のデータ型のint を出力し、valueOf はラッパークラスのInteger を出力する

String

(char[]) = String.toCharArray();
char配列を出力

(String) = String.substring(x,y)
文字列の一部をコピーする。
x,yはint型
xがコピー開始位置、yは終了位置、yが指定されていなければ最後まで指定したのと同じ。

考え方

文字列の最後から1文字づつ' ' だった時の処理、奇数桁フラグが有効、無効の時の処理を行う
最後に10で割ったあまりが0 かどうかを出力

Coding_Games:https://www.codingame.com/
String (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html
Integer (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html