Ruby 实现终端交互创建学生名单数组的代码问题求解
Ruby 终端输入生成数组实现方案
你确实需要使用循环来实现不限次数的用户输入采集,修正后可直接运行的完整代码如下:
students = [] # 采集第一个学生姓名 puts "Type a student name:" name = gets.chomp students << name # 循环采集后续姓名,直到用户输入为空 loop do puts "Type another student name or press enter to finish:" name = gets.chomp break if name.empty? students << name end # 按示例要求反转输入顺序 students = students.reverse # 处理输出格式,匹配预期的姓名拼接规则 student_count = students.size if student_count == 1 name_str = students.first elsif student_count == 2 name_str = students.join(' and ') else name_str = students[0...-1].join(', ') + " and " + students.last end puts "Congratulations! Your Wagon has #{student_count} students:" puts name_str
代码说明
- 不需要手动维护
count计数变量,直接用数组的size方法即可获取元素个数,避免计数错误 - 使用
loop循环重复采集后续输入,只要用户输入不为空就存入数组,输入为空时跳出循环,适配任意数量的姓名输入 - 输出部分单独处理了不同人数下的姓名拼接逻辑,完全匹配你给出的预期运行效果
- 如果是在Rails环境下,你可以直接调用
students.to_sentence方法实现相同的拼接效果,不需要手动写判断逻辑
原代码问题说明
你现有的代码没有使用循环,只能处理最多2次用户输入,无法支持3个及以上的姓名采集。同时else分支的逻辑只处理了1次额外输入就直接输出结果,不管后续用户是否还有输入需求,不符合功能要求。
内容的提问来源于stack exchange,提问作者Onur Karadeniz
相关产品推荐
相关产品推荐

