我有两种解决方案可以反向Ruby中的字符串。一个打印为真,另一个打印为false,两者都打印出我想要的响应。
为什么有人说这是错误的,即使它与打印true的解决方案产生了相同的答案?
这是解决方案和测试:
def reverse(string)
new = ""
i = 0
length = string.length
while i < length do
new = new.to_s + string[-1, 1].to_s
string.chop!
if i >= string.length
break
end
end
puts new
end
def secondreverse(string)
new = ""
i = 0
length = string.length
while i < length do
new = string[i] + new
i += 1
end
return new
end
这些是检查代码是否正常工作的测试。写下您的解决方案后,他们都应该打印成真。
puts("nTests for #reverse")
puts("===============================================")
puts(
'secondreverse("abc") == "cba": ' + (secondreverse("abc") == "cba").to_s
)
puts(
'secondreverse("a") == "a": ' + (secondreverse("a") == "a").to_s
)
puts(
'secondreverse("") == "": ' + (secondreverse("") == "").to_s
)
puts("===============================================")
在您的 #reverse
函数中,当您应该返回new
时,您将返回puts new
。
从下面的示例中可以看到,puts
在打印到屏幕后返回零:
irb(main): puts 'test'
test
=> nil
如果将puts new
更改为new
,则可以按照您的期望工作。
旁边
您不需要使用明确的return
调用。在Ruby中,执行的最后一行将返回,因此您可以在这两种方法中替换它:
return new
with:
new
问题是在reverse
方法中,您使用puts
方法打印了stdout的值,但您没有返回(您的方法返回nil
(。比较nil == "cba"
时,它返回false
。您必须返回new
变量:
def reverse(string)
new = ""
i = 0
length = string.length
while i < length do
new = new.to_s + string[-1, 1].to_s
string.chop!
if i >= string.length
break
end
end
new
end