我需要一个用 Ruby 编写的方法来计算变体。我已经用 Java 编写了它,但由于我是 Ruby 的新手,所以我在 Ruby 实现方面缺少一些东西。
该方法应该这样做:
method(1, "01") => ["0", "1"] <br>
method(2, "01") => ["00", "01", "10", "11"] ...so you get the idea.
注意:在 Ruby 实现中,我给出这样的参数:
method(2, ["0", 1"])
但这不是问题。
我的 Java 实现:
public static List<String> Variations(int strength, String usableChars) {
List<String> list =
new ArrayList<String>((int) Math.pow(usableChars.length(), strength));
if (strength == 0) {
list.add("");
} else {
List<String> l = Variations(strength - 1, usableChars);
for (char c : usableChars.toCharArray()) {
for (String s : l) {
list.add(c + s);
}
}
}
return list;
}
而且它工作正常。但这是我的 Ruby 实现:
def Variation (strength, arrayOfString)
array = Array.new(arrayOfString.size**strength)
if strength == 0
array << ""
else
a = Variation(strength-1, arrayOfString)
for i in arrayOfString do
for j in a do
array << (i + j)
end
end
end
return array
end
在这个过程中,我不断收到错误消息
test.rb:10:in `Variation': can't convert nil into String (TypeError).
最佳答案
在 Ruby 中,数组会根据需要自动增长。所以改变你的数组初始化:
array = Array.new(arrayOfString.size**strength)
到
array = []
枚举字符串中的每个字符,而不是
for i in arrayOfString do
这样做:
arrayOfString.each_char do |i|
最终结果:
#!/usr/bin/ruby1.8
def Variation (strength, arrayOfString)
array = []
if strength == 0
array << ""
else
a = Variation(strength - 1, arrayOfString)
arrayOfString.each_char do |i|
for j in a do
array << (i + j)
end
end
end
return array
end
p Variation(2, '01') # => ["00", "01", "10", "11"]
each_char 在 Ruby >= 1.8.7 中,或者您可以从 backports gem 中获取它.
关于java - 具有重复错误方法的 Ruby 变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4353929/