2017-11-17 8 views
-2

forループのwhileループを実行しています。配列の長さは9です。プログラムの長さを2倍にチェックしました。 forループは、配列内の各要素に対して実行する必要がありますが、代わりに最初の要素に対してのみ実行され、終了します。一方、whileループは配列の長さも使用し、期待通りに動作します。さまざまな 'puts'ステートメントは、コードを実行するときにこれを示します。 forループが9回実行されないのはなぜですか?forループは、長さが9の配列にもかかわらず、1回だけ実行されます。

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 
+0

実際のデータについて何も知らずに、意味のある入力を行うことは難しいです。一般的に、whileループはうまく動作します。 1つの場所でwhileループを使用する理由と、別の場所で「each」を使用する理由は明確ではありませんが。 –

+1

あなたの質問は不完全です。サポートについてはhttps://stackoverflow.com/help/mcveを参照してください。 –

+0

'[17、3、6、9、15、8、6、1、10]'は私が使用している配列で、唯一のデータです。私はこの最後の夜遅くまで働いていたので、もう一度見てみると、私はなぜ2つの異なる種類のループを使用したのか100%確信していませんが、 'if '比較とは何かがあると思います。私は 'forループ'を別の 'whileループ'に切り替えることを試みるかもしれません。 –

答えて

0

あなたが最良の取引を探しているなら、あなたが見つけて、テスト可能売り/買いのペアをし、可能な限り最高の利益を得るためにmax_byを使用するcombinationメソッドを使用することができます。

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で販売することが最適な戦略です。

+0

実際にはそれより複雑です。 '[17、3、6、9、15、8、6、1、10]'は私の配列です。アイデアは2つの数字の最大の違いを見つけることです**しかし、あなたは配列を順番に調べなければなりません。だから、この配列では、17 - 1があなたに大きな数字を与えても、12が答え(15 - 3)になります。したがって、すべての混乱。私はおそらくまだかなり複雑な方法でそれについて行っているだろう –

+0

あなたが理想的な取引を探したいなら、何が起こったのかを十分に知っていれば、あなたが使うことができる別のアルゴリズムがあります。私はそれに応じて編集しました。 – tadman

関連する問題