gpt4 book ai didi

Ruby 驱动程序使用 luhn 算法测试信用卡失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:26:59 26 4
gpt4 key购买 nike

我编写了一个工作代码来使用 luhn 算法检查信用卡是否有效:

class CreditCard
def initialize(num)
@@num_arr = num.to_s.split("")
raise ArgumentError.new("Please enter exactly 16 digits for the credit card number.")

if @@num_arr.length != 16
@num = num
end


def check_card
final_ans = 0
i = 0
while i < @@num_arr.length
(i % 2 == 0) ? ans = (@@num_arr[i].to_i * 2) : ans = @@num_arr[i].to_i
if ans > 9
tens = ans / 10
ones = ans % 10
ans = tens + ones
end
final_ans += ans
i += 1
end
final_ans % 10 == 0 ? true : false
end

end

但是,当我创建驱动程序测试代码来检查它时,它不起作用:

card_1 = CreditCard.new(4563960122001999)
card_2 = CreditCard.new(4563960122001991)
p card_1.check_card
p card_2.check_card

我一直在研究代码,我注意到如果我这样做,驱动程序代码就可以工作:

card_1 = CreditCard.new(4563960122001999)
p card_1.check_card
card_2 = CreditCard.new(4563960122001991)
p card_2.check_card

在发布原因之前,我尝试进行研究。从逻辑上讲,我不明白为什么第一个驱动程序代码不起作用。有人可以帮助我了解为什么会这样吗?

提前致谢!!!

最佳答案

您正在使用以 @@ 开头的类变量,它在 CreditCard 的所有实例以及该类(和其他相关类)之间共享。因此,每次创建新实例或将 check_card 应用于某个实例时,该值都会被覆盖。在您的第一个示例中,类变量将保存最后一次应用该方法的结果,因此将反射(reflect)最后一个实例 (card_2) 的结果。

关于Ruby 驱动程序使用 luhn 算法测试信用卡失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com