我有两种解决方案可以在Ruby中反转字符串。一个打印真实而另一个打印错误,但是,都打印出我想要的回应。为什么一个解决方案打印真正的其他打印错误?
为什么有人说它是错误的,即使它的结果与打印真实的解决方案的结果相同?
这里是解决方案和测试:
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("===============================================")
我看到他们所有返回'true'。你得到了什么? –
使用'new'作为变量的名称是一个非常糟糕的主意。它最终会混淆其他任何使用代码的人,包括你未来的自我。通常,使用更多的描述性名称,例如'new_str'或者甚至无处不在的'retval'。另外,请注意您使用的值的类型:'new.to_s + string [-1,1] .to_s'在字符串上使用了两个'to_s',这是冗余的并浪费了CPU时间。 'string [-1,1]'很尴尬; 'string [-1]'将完成同样的事情。 –
另外,要小心。你的第一个方法是传递传入的字符串。你没有看到传递一个字符串,但是尝试传入一个变量,然后检查它。因此,如果这是故意的,则应在方法名称的末尾使用'!'。 –