【问题标题】:How to create an array of squared values of another array如何创建另一个数组的平方值数组
【发布时间】:2019-08-17 16:49:43
【问题描述】:

我需要创建一个方法square_array 接受一个参数,该参数将是一个数组。该方法需要循环遍历原始数组并将每个元素与自身相乘,然后将平方值插入新数组中。

执行此操作时出现错误array[i] ** 2 = output[i] 我认为这是因为等号,但我不确定。

def square_array(array)
  i = 0
  array = ('1'..'3').to_a
  output = []
  while i < array.length do
    array[i] ** 2 = output[i]
    i += 1
  end
end

我期待

square_array([1,2,3]) 

返回

[1,4,9]

【问题讨论】:

  • “我相信我遇到了一个错误,但我不确定”不是一个足够精确的错误描述,我们无法为您提供帮助。 什么不起作用? 如何不起作用?你的代码有什么问题?您收到错误消息吗?错误信息是什么?你得到的结果不是你期望的结果吗?你期望什么结果,为什么,你得到的结果是什么,两者有什么不同?您正在观察的行为不是期望的行为吗?期望的行为是什么,为什么,观察到的行为是什么,它们有何不同?
  • array作为参数传递给你时,你为什么要在函数中设置它???
  • 另外,您是否考虑过使用map?如果你愿意,你可以把它包装在一个函数中,但是写output = array.map { |x| x * x }也一样容易。
  • 我的猜测是他才刚刚起步,并没有真正掌握基础知识,因此 array[i] ** 2 = output[i] 和方法中原始输入的覆盖

标签: arrays ruby


【解决方案1】:

当试图声明一个变量或给它分配一个新值时,它应该在等号运算符的左侧。因此,如果您有 a 即 5,并且您想将 a 乘以 2 的值分配给新变量 b,您可以这样做:

b = a * 2

而不是

a * 2 = b

这就是array[i] ** 2 = output[i] 没有产生您期望它产生的结果的原因。

看你的方法,还有几件事有点不对劲:

def square_array(array)
  i = 0
  array = ('1'..'3').to_a
  output = []
  while i < array.length do
    array[i] ** 2 = output[i]
    i += 1
  end
end

您接受array 变量作为输入,然后通过执行array = ('1'..'3').to_a 覆盖它(声明数字(整数)时无需使用单引号')并丢失输入值。通常你会在方法之外声明数组,然后将值传递给方法。像这样的:

array = (1..3).to_a 
def square_array(array)
  i = 0
  output = []
  while i < array.length do
    output[i] = array[i] ** 2 #like explained in the first part
    i += 1
  end
end

但是该方法仍然没有返回任何内容,因此只需在方法的最后一行添加output 即可解决问题(请记住,即使没有return 语句,Ruby 也会返回方法的最后一行)。 所以是这样的:

def square_array(array)
  i = 0
  output = []
  while i < array.length do
    output[i] = array[i] ** 2
    i += 1
  end
  output
end

我还应该补充一下,有一个更简单的方法来编写这个方法,例如使用#map 函数(就像@pjs 说的):

def square_array(array)
  array.map{|x| x**2}
end

然后您可以通过执行来调用该方法

square_array(array)

【讨论】:

  • array.map{|x| x**2} nuf 说 ;)
  • 非常感谢您的帮助!我对此还是很陌生,你所说的很有见地。
【解决方案2】:

这里,你的任务是错误的,

   array[i] ** 2 = output[i]

应该是

   output[i] = array[i] ** 2

【讨论】:

  • 修复了一个错误,但仍然没有修复功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 2018-04-17
  • 2015-06-29
  • 2018-02-13
  • 1970-01-01
  • 2018-02-08
相关资源
最近更新 更多