Ruby未定义方法/命名方法错误'*';对于nil:NilClass,工作直到循环
我的程序对数组1和数组2进行排序,并迭代检查1中的每个元素是否是2中每个元素的sqrt。我已经在没有循环的情况下测试了比较,结果很好,所以我不认为存在未初始化的变量Ruby未定义方法/命名方法错误'*';对于nil:NilClass,工作直到循环,ruby,Ruby,我的程序对数组1和数组2进行排序,并迭代检查1中的每个元素是否是2中每个元素的sqrt。我已经在没有循环的情况下测试了比较,结果很好,所以我不认为存在未初始化的变量 def comp(array1, array2) order1 = array1.sort order2 = array2.sort i = 0 while i < order1.length if order1[i] * order1[i] == order2[i] i += 1
def comp(array1, array2)
order1 = array1.sort
order2 = array2.sort
i = 0
while i < order1.length
if order1[i] * order1[i] == order2[i]
i += 1
else
false
end
end
order1[i] * order1[i] == order2[i]
end
def comp(阵列1、阵列2)
order1=array1.sort
order2=array2.sort
i=0
而我的长度小于1.5米
如果order1[i]*order1[i]==order2[i]
i+=1
其他的
假的
结束
结束
订单1[i]*订单1[i]==订单2[i]
结束
你能给我指出问题的方向吗?我也没有使用Math.sqrt,因为它在我的界面上超时。您的
I
等于order1.length
,在循环之后,因此方法的最后一行基本上是
order1[order1.length] * order1[order1.length] == order2[order1.length]
即(假设数组长度相同):
这会抛出一个错误。不确定为什么需要最后一行,如果删除它并仅返回一个计数器,则如果对符合条件的元素使用专用计数器,而不是使用索引(索引必须始终递增),则方法将按预期工作:
作为最后一步,我们还可以确定数组中有多少元素满足某个条件,而无需指定局部变量,如下所示:
def comp(array1, array2)
order2 = array2.sort
array1.sort.each_with_index.count { |el, i| el ** 2 == order2[i] }
end
非常感谢,这是彻底的,我会调查统计员。程序正在运行,但我现在得到了“in
comp”:nil:NilClass(NoMethodError)的未定义方法,有什么想法吗?你似乎在把nil
而不是实际的数组传递给你的方法。如果你想知道排序后的array1
的每个元素的平方是否等于排序后的array2
在相同索引位置的元素,你可以写array1.sort.zip(array2.sort)。好吗?{| n1,n2 | n1*n1==n2}
。
def comp(array1, array2)
order1 = array1.sort
order2 = array2.sort
i = 0
counter = 0
while i < order1.length
if order1[i] * order1[i] == order2[i]
counter += 1
end
i += 1
end
counter
end
def comp(array1, array2)
order1 = array1.sort
order2 = array2.sort
counter = 0
order1.each_with_index do |el, i|
if el * el == order2[i]
counter += 1
end
end
counter
end
def comp(array1, array2)
order2 = array2.sort
array1.sort.each_with_index.count { |el, i| el ** 2 == order2[i] }
end