首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在while循环中保存变量

如何在while循环中保存变量
EN

Stack Overflow用户
提问于 2016-06-23 16:44:13
回答 2查看 265关注 0票数 0

我有一个设置为10的变量x,我想写一个while循环来递增它。我知道你可以很容易地使用一个for-loop来完成这个任务,但是简单一点也不好玩。我的代码是:

代码语言:javascript
复制
def add(a)
   g = a + 1
   puts g
end

def loop(d)
   x = 0
   while x <= 4
       x += 1
       add(d)
   end
end

loop(9)

当我跑的时候,我得到了9,4次。如何使此代码的输出为9、10、11、12?

EN

回答 2

Stack Overflow用户

发布于 2016-06-23 16:55:39

您的问题是,您说add(d)d是您的循环loop(d)的参数。Ruby盲目地做你告诉他的事情:loop(9),所以这里的d=9和保持等于9。你需要递增d的值。为此,add现在将返回递增的值,我们将返回值赋给d(在loop中)。

要解决您的问题,您需要执行以下操作:

代码语言:javascript
复制
def add(a)
   g = a + 1
   puts g
   g
end

def loop(d)
   x = 0
   while x <= 4
       x += 1
       d = add(d)
   end
end

loop(9)

这是一个很大的问题,但是,你的代码根本不是的方式。

如果我要这样做,我会这样做:

代码语言:javascript
复制
def loop(start_number, repeat_number, increment)
  repeat_number.times do
    start_number += increment
    p start_number
  end
end

loop(9, 4, 1)
票数 1
EN

Stack Overflow用户

发布于 2016-06-23 18:46:14

如果你真的想使用while,而你的预期目标是从9到12的Array

只需在while循环之前定义数组变量,并像这样返回它:

代码语言:javascript
复制
def loop(number)
  x, a = 0, []
  while x <= 3
    a << number + x
    x += 1
  end
  a
end

loop(9)
# => [9, 10, 11, 12]

BETTER WAY

但是更好的方法是使用像timesmap这样的ruby函数

在本例中,我们使用timesmap

代码语言:javascript
复制
def loop(d)
  4.times.map{|i| d + i}
end

p loop(9)
# => [9, 10, 11, 12]

也许这会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37986465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档