为什么一个解决方案打印为真而另一个解决方案打印为假?
Why one solution prints true when the other prints false?
我有两个解决方案来反转 Ruby 中的字符串。一个打印 true 而另一个打印 false,但是,两者都打印出我想要的响应。
为什么有人说它是假的,即使它与打印出正确的解决方案产生相同的答案?
以下是解决方案和测试:
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
returns 打印到屏幕后为 nil:
irb(main): puts 'test'
test
=> nil
如果您将 puts new
更改为 new
,它会如您所愿地工作。
一边
您不需要使用显式 return
调用。在Ruby中,最后执行的一行会被返回,所以你可以在这两个方法中替换为:
return new
与:
new
问题是在 reverse
方法中,您正在使用 puts
方法将值打印到标准输出,但您没有 returning 它(您的方法 returns nil
代替)。当你比较 nil == "cba"
时,它 returns false
。您必须 return 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
我有两个解决方案来反转 Ruby 中的字符串。一个打印 true 而另一个打印 false,但是,两者都打印出我想要的响应。
为什么有人说它是假的,即使它与打印出正确的解决方案产生相同的答案?
以下是解决方案和测试:
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
returns 打印到屏幕后为 nil:
irb(main): puts 'test'
test
=> nil
如果您将 puts new
更改为 new
,它会如您所愿地工作。
一边
您不需要使用显式 return
调用。在Ruby中,最后执行的一行会被返回,所以你可以在这两个方法中替换为:
return new
与:
new
问题是在 reverse
方法中,您正在使用 puts
方法将值打印到标准输出,但您没有 returning 它(您的方法 returns nil
代替)。当你比较 nil == "cba"
时,它 returns false
。您必须 return 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