2017-02-12 33 views
0

該提示要求我在下面使用公共靜態並僅使用遞歸。這是我第一週使用Java,所以我的知識基礎很低。我看到一些Luhn算法的在線代碼,但似乎沒有一個使用布爾作爲第二個參數。Java新手,無法制作Luhn算法

基本上我需要創建一個Luhn算法,它從每個值(從右到左),將第二個值加倍(布爾值用於確定數字是否加倍),然後將所有值一起。例如, )。 System.out.println(sumLuhnDigits(7992739871005L,false));

會返回72

我遇到的問題是'長'型。

Java告訴我,我需要在設置它等於(數字%10)之前啓動count變量。等等。我假設這是因爲我已將它設置爲+ =並且它需要具有值才能執行所以。然而,在頂部設置它等於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'塊怎麼能評估?布爾「odd」不得不是假的,也不是真的。這絕不會發生。 –

回答

3
  1. 伯爵絕對是一個漫長的類型

  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

我看到我的錯誤,我需要將兩位數值加在一起。再次感謝。 – 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