For循环只运行一次,尽管数组的长度为9

时间:2017-11-17 19:45:38

标签: arrays ruby for-loop

我在for循环中运行了一个while循环。该数组的长度为9,我已经仔细检查了程序中的长度。 for循环应该为数组中的每个元素运行,而是仅针对第一个元素运行并结束。另一方面,while循环也使用数组的长度,并按预期运行。各种'放置'语句在运行代码时显示。为什么for循环运行9次?

def stock_picker(stock_prices)
  differences = Array.new
  stock_prices.each do |price|
    day = 0
    puts "The for loop is starting"

    while day < stock_prices.length
      puts "The while loop is working"
      puts price
      if price < stock_prices[day]
        puts "The if statement is working"
        difference = stock_prices[day] - price
        puts difference
        differences.push(difference)
        puts differences
      end
      day += 1
    end

    puts "The for loop is ending"

  end
  puts differences
end

1 个答案:

答案 0 :(得分:0)

如果您正在寻找最佳交易,您可以使用combination方法查找和测试可能的买/卖对,并使用max_by获得最佳利润:

def best_theoretical_trade(prices)
  prices.combination(2).max_by do |buy,sell|
    sell - buy
  end
end

best_theoretical_trade([17, 3, 6, 9, 15, 8, 6, 1, 10])
# => [3, 15]

这里以3买入并以15卖出是最佳策略。