为什么我的回文探测器不工作(仅返回一个输入)?

时间:2019-07-13 17:19:10

标签: ruby

我正在尝试练习Ruby,并且正在制造回文检测器。

我尝试将else更改为elsif,但均无济于事。

print "Enter a Word and check if it's a Palindrome!"
word = gets.chomp
if word.reverse! == word
  print "The word you entered was a Palindrome!"
else  
  print "The word is not a Palindrome!"
end

它只返回"The word you entered was a Palindrome!",但应该返回一个。

4 个答案:

答案 0 :(得分:4)

您需要删除爆炸!,因为String#reverse!会将字符串反转到位并且条件始终为真。

正在发生的事情:

word = "whathever"
word.reverse!
#=> "revehtahw"

word
#=> "revehtahw"

"revehtahw" == "revehtahw"
#=> true

这就是您需要的:

word = "whathever"
word.reverse
#=> "revehtahw"

word
#=> "whathever"

"revehtahw" == "whathever"
#=> false

答案 1 :(得分:2)

String#reverse! returns self,即reverse!消息发送到的对象。因此,换句话说,word.reverse!返回word所引用的对象,该对象始终等于自身ergo

word.reverse! == word

始终为true

您要寻找的是String#reverse,它会返回新字符串

答案 2 :(得分:0)

就像其他人所说的那样,您需要删除!运算符,因为str.reverse!可以就地操纵字符串。

如果您是Ruby的新手,那么您也可以做一些很酷的事情,将代码放在if语句之前,以使其更具可读性并缩短它。另外,三元运算符(?:)也很有用。

示例前的代码

print "Enter a Word and check if it's a Palindrome!"
word = gets.chomp

print "The word you entered was a Palindrome!" if word.reverse == word
print "The word is not a Palindrome!" if word.reverse != word

三元示例

print "Enter a Word and check if it's a Palindrome!"
word = gets.chomp

puts word.reverse == word ? "It's a Palindrome!" : "It's not a Palindrome!"

答案 3 :(得分:0)

当您添加“!”时对于方法(就像您使用word.reverse一样!),ruby将其表示永久更改原始内容,因此word将变为word.reverse。因此,当您比较word.reverse时!改为单词,您已经将单词改为相反的单词,因此您输入的每个单词都恢复为真实。

您需要更改的是

if word.reverse == word

这实际上将检查当前单词是否等于反向单词。