我有兩種解決方案可以在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]'將完成同樣的事情。 –
另外,要小心。你的第一個方法是傳遞傳入的字符串。你沒有看到傳遞一個字符串,但是嘗試傳入一個變量,然後檢查它。因此,如果這是故意的,則應在方法名稱的末尾使用'!'。 –