在每次迭代中,将循环结果打印在同一行上,而不是每次迭代都换行。
在每次迭代中,将循环结果打印在同一行上,而不是每次迭代都换行。
我希望我的代码只在一行上打印silly
,但实际上它像这样打印出来:
silly silly silly
我希望的输出是:
silly silly silly
这是我的代码:
def print_silly_name () i = 0 while ( i < 60 ) puts "silly" i += 1 end end def main name = read_string('Please enter your name: ') if ( name == "benyamin") or ( name == "jack" ) puts " #{name} 是个好名字" else puts print_silly_name end end main
问题的原因是在print_silly_name函数中使用了puts语句,每次迭代时都会打印一行,导致输出结果每个迭代都会换行显示。
解决方法是将print_silly_name函数中的puts语句改为print语句,这样每次迭代时打印的结果都会在同一行显示。
以下是修改后的代码:
def print_silly_name print Array.new(60, 'silly').join(' ') end def main name = read_string('Please enter your name: ') if ( name == "benyamin") || ( name == "jack" ) puts " #{name} that is a nice name" else print_silly_name end end main
修改后的代码中,print_silly_name函数使用了print语句,每次迭代时打印的结果都会在同一行显示。这样就解决了问题,输出结果不再每个迭代都换行显示。
问题:循环的每次迭代都会在新行上打印结果,而不是在同一行上打印。
原因:
1. 使用了错误的打印方法。在代码中使用了puts
,而应该使用print
。
2. 调用了未定义的#read_string
方法。应该使用gets.chomp
或定义#read_string
方法来替换。
3. 使用了错误的逻辑运算符or
,应该使用||
。
解决方法:
1. 将puts
替换为print
。
2. 将#read_string
替换为gets.chomp
或定义#read_string
方法。
3. 将or
替换为||
。
修复后的代码如下:
def print_silly_name_60_times 60.times do print "silly " end end def main name = gets.chomp if (name == "benyamin") || (name == "jack") puts "#{name} that is a nice name." else print_silly_name_60_times end end main
修复后的简化代码如下:
def print_silly_name_60_times 60.times{print "silly "} end def main name = gets.chomp %w(benyamin jack).include?(name) ? (puts "#{name} that is a nice name.") : print_silly_name_60_times end main