gpt4 book ai didi

ruby - 为什么我的返回会弄乱我的结果?

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:41 25 4
gpt4 key购买 nike

这段代码(它是更大代码的一部分)的目的是确定年份中是否有重复数字。这是我的代码:

def no_repeat?(year)
year = year.to_s
string = ''

year.each_char{|i| string << year[i] unless string.include?(year[i])}
year.length == string.length ? (return false) : (return true)
end

puts no_repeat?(1993)

它总是返回 true,我不明白为什么会这样。我已经尝试将三元组扩展为完整的 if 语句......仍然返回 true。我已经尝试将整个方法写成一个 while 循环(有两个索引将一个索引与另一个索引进行比较)

def no_repeat?(year)
year = year.to_s

i = 0
while i < year.length

i2 = i + 1
while i2 < year.length

if year[i] == year[i2]
return false
else
return true
end

i2 += 1
end
i += 1
end

...仍然返回 true。我已经独立测试了每一件事,在我投入返回之前它们都工作正常。返回是什么?我需要重新审视它。

最佳答案

您构造三元组的方式不正确。由于您的方法试图确保不重复任何内容,因此当 == 为真时,它应该返回 true。三元本身旨在返回一个值,而不是真正在其结果中执行像 (return false) 这样的表达式。这有效,但实际上不存在是非常规的。

三元组应该是这样的

return year.length == string.length ? true : false

这当然可以简化,因为 == 表达式已经返回了一个 bool 值。

return year.length == string.length

接下来,您对 year[i] 的使用不太正确。 String#each_char是将字符值赋给i,所以可以直接使用i。看起来您使用它的方式确实有效,但这不是迭代器变量 i 的使用方式。

这使您的方法变成:

def no_repeat?(year)
year = year.to_s
string = ''

# i represents the character in this iteration
# so you may just directly reference i here
year.each_char{|i| string << i unless string.include?(i)}
# If the lengths match, return true because there's no repeating character
return year.length == string.length

# You could omit the 'return' keyword too which is preferred by convention
# since Ruby returns the last expression's value implicitly
# year.length == string.length
end

关于ruby - 为什么我的返回会弄乱我的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29135592/

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