在我的第一个 ruby 硬件作业中,我必须编写一个 FizzBuzz 程序。 (如果一个 int 是/3,它转换为一个“Fizz”字符串,如果被 5 整除,一个“Buzz”字符串,如果被两个“FizzBuzz”字符串整除。)最后,如果不能被任何一个整除,我需要转换将其自身编号为一个字符串,并在名为 main 的方法中将其存储到一个数组中。
class FizzBuzz
def initialize(int_num, str_fb, value)
self.int_num = int_num
self.str_fb = str_fb
self.value = value
end
def int_num
@int_num
end
def int_num=(num)
raise TypeError if not num.is_a? Integer
@num = int_num
end
def str_fb
@str_fb
end
def str_fb=(name)
if int_num % 3 == 0
int_num = "Fizz"
elsif int_num % 5 == 0
int_num = "Buzz"
elsif int_num % 5 == 0 and int_num % 3 == 0
int_num = "FizzBuzz"
else
str_fb = int_num.to_s #Also needs to be stored in an array in main function
end
def main
ary =array.new
end
end
如何将新转换的 int_num(现在是字符串)存储到 main 中的数组中?另外,上面的代码只是该类的一个方法,但它看起来正确吗?谢谢,我是一个成熟的 Ruby 新手,感谢所有帮助。
** 添加了完整代码。仍然不完整,因为我需要为循环 1-50 的值创建一个 getter 和 setter。
最佳答案
要回答原来的问题,只需将要返回的变量放在数组中的方括号中即可:
def main
[str_fb]
end
许多其他特定于 Ruby 的改进可以在这里进行。对于初学者,您可以将 int_num
和 int_num=
方法替换为一行:attr_accessor :int_num
。 (您需要将 raise
移至构造函数。)
您可以将 str_fb
方法替换为另一行:attr_reader :str_fb
。
在构造函数中,Ruby中更常见的是使用实例变量来存储输入参数。考虑哪些方法要公开,哪些要私有(private)。您可以将实例方法(包括 attr_accessor
和 attr_reader
添加一行 private
并将这些方法移到它下面。
因此您的代码可能如下所示:
class FizzBuzz
attr_accessor :int_num
attr_reader :str_fb, :value
def initialize(int_num, str_fb, value)
raise TypeError unless int_num.is_a?(Integer)
@int_num = int_num
@str_fb = str_fb
@value = value
end
<public instance methods here>
private
<private instance methods here>
end
关于arrays - Ruby:将 int 和存储转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387411/