ruby - 小脚本在 Ruby 中的循环问题

标签 ruby

我正在做一个 Ruby 练习,但没有得到我想要的输出。

我认为问题从我的算法的第 2 步开始。while 循环的计数器让我有点困惑,我不确定如何结束 while 循环。但除此之外,我认为代码基本没问题。

Write a program, which will find all such numbers between 1000 and 3000 (both included) such that each digit of the number is an even number.

The numbers obtained should be printed in a comma-separated sequence on a single line.

我要实现:

  1. 迭代整个范围 (1000..3000) 并识别所有偶数,并将它们存储到名为 array_evens 的单独数组中。
  2. 遍历 array_evens 并将每个偶数分成单独的数字。
  3. 遍历所有这些数字并使用 even? 确定每个数字是偶数还是假数。
  4. 如果该数字是偶数,将其推送到名为 all_evens_baby 的数组中

这是我的代码:

range = (1000..3000)
array_even = Array.new()
even_digits_number = []
n = 0 #counter variable
all_evens_baby = []
even_or_odd = nil


range.select do |x|
  if x.even?
    array_even = array_even.push(x)

    while (n <= array_even.length)
      #The placement of this while loop may be wrong.
      #iterate over all evens to divide all numbers into singular digits

      current_divided_number = array_even[n].to_s.chars
      current_divided_number.map do |x|
        #iterate over all digits to determine if even or odd

        even_or_odd = x.to_i.even? #=> true or false

        if even_or_odd == true
          all_evens_baby = even_digits_number.push(array_even[n])
        else
        end
      end
      n+=1
    end
  end
end

最佳答案

首先尝试让当前代码正常工作 - 它离我们不远了:

range = (1000..3000)
array_even = Array.new()
all_evens_baby = []

range.each do |x|
  if x.even?
    array_even.push(x)
  end
end # you'r done here, step 1 is finished.
    # shorter is:  array_even = range.select(&:even?)

array_even.select do |x|
  current_divided_number = x.to_s.chars
  n = 0 #counter variable
  current_divided_number.each do |d|
    n=n+1 if d.to_i.even?
  end
  all_evens_baby << x if n == 4
end

puts all_evens_baby.join(",")   

第一步是不必要的,第 2/3 步无论如何都会过滤掉可能性。 Ruby 2.4 有一个很好的方法来获取整数的数字,称为 digits,因此可以避免转换为字符串。

看看:

all_evens_baby = (1000..3000).select do |num|
  num.digits.all? do |d|
    d.even?
  end  #if this is true, num will be in all_evens_baby
end
puts all_evens_baby.join(",")

关于ruby - 小脚本在 Ruby 中的循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41984381/

相关文章:

ruby - 将字符串(表示 UTF-8 十六进制)转换为字符串

ruby-on-rails - Ruby on Rails - 在 Windows 上安装后无法识别捆绑命令

ruby - 正则表达式:从 CSS 文件中提取 CSS 样式

ruby-on-rails - Arel,如何加入

ruby - 输出到控制台,同时在 ruby​​ 中保留用户输入

ruby - Azure Ruby SDK 创建公共(public) blob

ruby-on-rails - Ruby on rails wkhtmltopdf css 样式表未在生产(linux)服务器上呈现

ruby-on-rails - ActiveRecord 更新不更新我的专栏

ruby - 自定义<<方法

ruby-on-rails - 如何让这个 ruby​​ 方法不那么难看(嵌套)