2017-02-12 3 views
0

プロンプトでは、パブリック静的を以下に設定し、再帰のみを使用する必要があります。これは私の知識ベースがかなり低いので、Javaを使用した最初の1週間です。私はLuhnアルゴリズムのコードをオンラインで見ましたが、第2パラメータとしてブール値を使用していないようです。Luhnアルゴリズムの作成に問題があり、Javaを使用していません

基本的には、各値(右から左)をとり、2番目の値を2倍して(ブール値は2倍にするかどうかを決定するために使用される)、Luhnアルゴリズムを作成する必要があります。一緒に。 例) System.out.println(sumLuhnDigits(7992739871005L、false));

は72

私はに実行している問題は、「長い」タイプについて返します。

Javaは、カウント変数を(number%10)と等しく設定する前に開始する必要があることを私に伝えています。これは、+ =として設定されており、そう。しかし、それをトップに0に設定すると、私が作ろうとしていたカウンターが壊れてしまいます。

また、「長い」タイプではないと言って、カウントを返すときも構文は好きではありません。 私は現在、stackoverflowエラーにも悩まされているようです。だから私は再帰から脱出する必要があります。

public static long sumLuhnDigits(long number, boolean odd) { 
    /// Java IDE said I needed to initiate the variable count but now it won't accumulate properly being set = 0 
    long count = 0; 

    if (odd == false) { 

     count += number % 10; 
     number = number/10; 

     odd = true; 
     return sumLuhnDigits(number, odd); 

    } if (odd == true) { 
     count += (number % 10) * 2; 
     number = number/10; 
     odd = false; 
     return sumLuhnDigits(number, odd); 

     /// Here I ran into the problem that count is not the type long, this is also as far as I have gotten  
    } if (number == 0) { 
     return count; 
    } 
} 
+0

スタックオーバーフローへようこそ!あなたがかもしれように見えます宿題のためのスキー。それ自体に問題はありませんが、これらのことを守ってください(http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845)、それに応じて質問を編集してください。 (これは宿題ではなくとも、とにかくアドバイスを検討してください) –

+1

質問をするのを忘れました。何が間違っているのでしょうか? –

+1

最後の 'else if'ブロックはどのように評価できますか?ブール値の「奇数」は、偽でも真でもない。それは決して起こりません。 –

答えて

3
  1. Countは間違いなくあなたが再帰的とローカル変数をリセットしているので、あなたは何を蓄積していないロングタイプ

  2. です。

カウントを渡す2つの方法を試すことができます(同じことを行う他の方法があります)。また、カード番号が整数の最大値以上になることは疑いありません。

public static int sumLuhnDigits(long number, boolean odd) { 
    return sumLuhnDigits(number, odd, 0); 
} 

private static int sumLuhnDigits(long number, boolean odd, int count) { 
    if (number <= 0) return count; 
    if (!odd) { 
     count += number % 10; 
    } else { 
     count += (number % 10) * 2; 
    } 
    number = number/10; 
    odd = !odd; 
    return sumLuhnDigits(number, odd, count); 
} 
+0

私はあなたの方法を見ていきます。ありがとう!私はそれが私の記事の例に90の回答を与えることに気づいたが、それをもっとよく理解するためにはもう少しコードを見る必要があるだろう。 – JWA

+0

あなたのアルゴリズムはちょうど間違っている可能性があります;)ソリューションはここに豊富ですhttp://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers#Java –

+1

私のエラーが表示され、私は一緒に2桁の値を追加する必要があります。再度、感謝します。 – JWA

2

以下は、必ずしも正解ではなく、いくつかのコード決定を扱っています。 の場合を計算すると、は何ですか?です。だから:汎用コーディング。

public static long sumLuhnDigits(long number, boolean odd) { 
    if (number == 0) { 
     return 0; 
    } 

    long count; 
    if (!odd) { 
     count = number % 10; 
    } else { 
     count = (number % 10) * 2; 
    } 
    return sumLuhnDigits(number/10, !odd) + count; 
} 
  • 最終条件は(0に達した番号が最初に行うことができます。
  • countローカル変数である。それもパラメータではないとして、それが何かを蓄積しない。
  • しかし、あなたがすることができます結果に追加します。
  • ブール値が== false/trueなしで良く使用されている。
+0

ありがとう!私はまだこの言語には新しく、これはたくさんの助けになります。 – JWA

関連する問題