2017-02-13 8 views
0

こんにちは私は現在、クラスのために何かをコーディングしています。基本的には、テキストファイルから数値を引き出すためのクレジットカードチェッカーを作成しています。チェックデジットに従わなければならない規則は以下の通りです。ポジションに応じて番号を変更

  • カード番号の最後の桁を削除します。最後の桁は の数字です。

  • 数字を逆にします。

  • 乗算9

  • 合計すべての数字よりも高い任意の結果から2

  • 減算9によって奇数位置の桁(1、3、5、等)。

  • チェックデジット(カードの最後の数は)あなた が10の倍数(モジュロ10)を取得するために追加する必要があります量である

だから私は離れてチェックデジットを引っ張っ新しい変数を設定し、カード番号を取得することによって/ 10。これは長いので、小数点はありませんので、最後の数字を取り除きます。私は元の数字の%10を使用してその数字を自分の小切手桁として保存しました。 /:私は今、次のステップにこだわって

    long lcards = Long.parseLong(cards);      
        long lastDigit = lcards % 10; 
        long newCard = lcards/10; 

        long reverseCard = 0; 

        while (newCard != 0) 
        { 
         reverseCard = reverseCard * 10; 
         reverseCard = reverseCard + (newCard % 10); 
         newCard = newCard/10; 
        } 

:私はその後として見ることができるの数字を逆にループを使用していました。どうすればいい?ありがとう!

+1

数字をバイトの配列として格納すると便利です。ビット操作と計算を使うよりも簡単かもしれません。 –

+0

私はそれをどうやって正確にやりますか? – bobobobbins

答えて

0

次のステップ:

乗算あなたの入力にすべて数字を反復処理する必要があります。2.

によって奇数位置の数字(1、3、5、など)数。そして、それを行うには2つの方法があります。最後の桁を取り除くために、あなたの最初の試みとして

  1. 多かれ少なかれ同じ - あなたはにあなたの番号の各桁の「アクセス」にモジュロ/除算演算を使用することができます前と同じように!
  2. または、の1つをとする代わりに、整数をint値の配列に変換することを検討してください。図のようにhere。これで、その配列を繰り返し処理し、必要な計算を行うことができます。 最後に、配列を単一の番号に「マージ」するだけです。最後の桁を取り除くには、の先頭にとすることもできます。

練習の残りの部分に進むのに役立つ希望!

+0

私はそれを最初の方法でしたが、いつ私が実際にマスターカードとして見ているカード番号入力の長さが16-19文字の長さであるかわからないので、いつ止めるべきか分かりましたか? – bobobobbins

+0

私はあなたの質問を得ることはありません。私があなたに与えたリンクは**任意の**数値を一連の値に変える方法を示しています。長さにかかわらず。それ以外にも。 'long newCard = lcards/10;とすると、ちょっとあなたが数字が足りなくなったことをどのように検出できるか考えてみてください。ヒント:最悪の場合...試してみて、値を印刷してください。何が起こるかを見てください! – GhostCat

+0

申し訳ありません私の質問は、私が最後の数字を取り除くためにしたことをするための最初の選択肢に関するものでした。私はそれを行うには、しかし、各位置の新しい変数を作成する必要があります、正しい?もし私が長さの長さを知らなければ、私は何ポジションをつくることができますか? – bobobobbins

関連する問題