我试图让一个简单的Ruby程序正确运行。
我需要它来接受用户输入,直到用户键入q
以“退出”。它还需要将用户输入的最后四个字母大写,并在四个字母下输入,以大写所有字母。
它仅适用于四个字母的输入,当我输入“quit”时,它会出现nil错误。
请参阅下面的代码。
我在Eclipse 2.0中使用Eclipse。
puts ("\n" * 10)
loop do
puts "Please enter a word. (To quit type q.)" # Gets the users input
puts ("\n" * 3) #Scroll the screen 3 times
str = gets.chomp #Collect the player's response
puts ("\n" * 3) #Scroll the screen 3 times
length = str.length # Counts length of string
str = str[0..(length-5)] + str[(length-4)..length].upcase # Only makes last four letters of user input capitalized
puts str # Shows on screen the user input with capitalized last four letters
puts ("\n" * 3) #Scroll the screen 3 times
break if str == "q"
end
答案 0 :(得分:2)
当你编写这样的代码时,你需要注意[]
:
str = str[0..(length-5)] + str[(length-4)..length].upcase
如果索引为负数,则从字符串末尾开始计算。例如:
str = "abcde"
str[-1] # => "e"
str[-2] #=> "d"
有关详细信息,请参阅String.[]。
关于你的问题,这是我的逻辑:
break if str == "q"
if str.length < 4
str = str.upcase
else
str = str[0...-4] + str[-4..-1].upcase
end
p str
答案 1 :(得分:0)
你需要对你的长度进行一些检查。如果长度小于4,则长度 - 5将返回负数和您的
str[0..(length-5)] + ...
行会不高兴。例如。如果输入“str”,那么您的代码将尝试执行:
length = 3
str[0..-2] + str[-1..3]
这没有意义。此外,由于您在最后检查str ==“q”,这可能也发生在“q”。在块中移动您的支票并分手,并确保您不会将所有字符串视为超过4个字符。