为什么一种解决方案打印 true,而另一种解决方案打印 false? [已关闭]

问题描述 投票:0回答:2

我有两种解决方案来反转 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

这些是检查代码是否正常工作的测试。写完你的解决方案后,它们应该全部打印 true。

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("===============================================")
ruby string reverse
2个回答
1
投票

在您的

#reverse
函数中,当您应该返回
puts new
时,您正在返回
new

从下面的示例中可以看到,

puts
在打印到屏幕后返回nil:

irb(main): puts 'test'
test
=> nil

如果您将

puts new
更改为
new
,它将按您的预期工作。

旁白

您不需要使用显式的

return
调用。在 Ruby 中,将返回最后执行的一行,因此您可以在这两种方法中替换它:

return new

与:

new

1
投票

问题是,在

reverse
方法中,您使用
puts
方法将值打印到标准输出,但没有返回它(您的方法反而返回
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
© www.soinside.com 2019 - 2024. All rights reserved.