2010-12-29 8 views
0

私はこのjsコードを書いていますが、私はループのようなものを書く場合は、 ループが最適ですか? whileループ、forループ、do-whileループjavascriptループ

var loan = 1000000; 
var amoyear = 6000; 
var answer = loan/amoyear; 
document.write("A loan of 1000000 SEK is paid after " 
    + Math.ceil(answer) + " years if installment is 500 kr/month. "); 

これは非常に簡単ですが、私はそれを私の心に入れません。

+0

コードをフォーマットしてください – Dutchie432

+1

ループを必要とする結果は何ですか? – AndreKR

+1

私はあなたに最も一般的な答えを与えるつもりです:それは依存します:)しかし真剣に、あなたはループの各反復で何を変えたいですか?私はちょうどコードを見てからそれを出すことはできません。ループするものは何もないようだ。 – Jakob

答えて

0

あなたのフォーマットされていないコードを表面的に見てみると、異なるローンの返済にかかる時間を計算するループが必要なようです。数字を使って作業するときは、通常forループで作業する方が簡単です。あなたは簡単にwhileループとまったく同じことを行うことができますが、以下の例は、($ 100,000の間隔で)$ 100,000 $ 20,000,000の間にローンを完済する

var maxLoanAmount=20000000; 
var amoyear = 6000; 
for (var loan = 100000; loan<=maxLoanAmount; loan = loan + 100000){ 

    var answer = loan/amoyear; 
    document.write("A loan of " + loan + " SEK is paid after " + Math.ceil(answer) + " years if installment is " + (amoyear/12) + " kr/month. "); 
} 

を時間を計算し、両方。

var maxLoanAmount=20000000; 
var amoyear = 6000; 
var loan = 100000; 
while (loan<=maxLoanAmount){ 
    var answer = loan/amoyear; 
    document.write("A loan of " + loan + " SEK is paid after " + Math.ceil(answer) + " years if installment is " + (amoyear/12) + " kr/month. "); 
    loan = loan + 100000; 
} 
+0

なぜローンを値未満にする必要がありますか:while条件で20000000?その数字は質問掲示板のどこにも見つかりません。 –

+1

これは、私がループを止めるために選んだ数字です。あなたが2000万ドルの家を買う余裕があれば、あなたのループを書くために他の人を雇うことができます。ハードコードされた数値は、特定のアプリケーションのニーズに合わせて変更できることを具体的に述べる必要がありますか? – Dutchie432

+0

20万ドルはお金のクールな量です^^おかげでみんな! – SHUMA

3

(ループ構造に関する一般的な質問として、あなたの質問に接近し、それらがどのように「一般的に」が使用されている)

それはあなたの終了条件が何であるかに依存して...

  • 使用A forループを一定回数繰り返し、ループ内で増分(または減分)値を使用する必要がある場合は
  • ループを使用します。終了条件がaで表される場合はwhileループを使用します。ループの反復の最小回数はゼロです(ブールステートメントはループコードの前にあるため、
  • ループを使用して終了条件をブールステートメントで表現でき、最小値をブールステートメントで表すことができる場合は、do...whileループを使用します。私が何を行っていることは、より効率的ですが、あなたはループと分割部を実行したいと思います
0

(ブール文がループコードの後に​​に位置しているので)あなたのループの繰り返し回数は1です。私は、これはここで宿題:)

ないことを願う

が答えです:

var loan = 1000000; 
var amoyear = 6000; 
var answer; 
for(answer=1; amoyear*answer<=loan; answer++); 

上記のコードは、forループの簡単な使用していますし、私はそれがこのような状況のために最善だと思います。

+1

Thansk Gunnar、シンプルで美しい。 – SHUMA

0

あなたの質問に荒い、一般的な答えは(あなたの特定のユースケースを考慮しない):

あなたは間隔でループにしたい場合は、使用した後、各ステップで一定量値を増加/減少for-loopは非常に慣用的なので(for-loop)、ほとんどすべての命令的またはオブジェクト指向の言語で使用されます。

ほとんどの場合、whileループを使用します。

もちろん、do-whileはあまり役に立ちませんし、頻繁に見られることはないと思います。しかし、若干のリファクタリングでは、しばしばそれをwhileループに変更することができます。

0

ループを繰り返す前に項目の数を変更したときに使用します。あなたは、forループの次の形式を使用することができるいくつかのオブジェクトのフィールドを介して

var items = []; 
.... 
for(var i = 0; i < items.length; i++){ 
... 
} 

もし反復場合:例えば、配列の要素またはアレイのようなオブジェクトを介してループ

var obj = {}; 
... 
for(var field in object){ 
//access each value as object.field 
} 

whileループをループが終了した時点を知らないときに使用されます。

がdo-whileループの使用もループが終了したときに、あなたが用語を知らないが、あなたは は比較に少なくとも1回反復する必要がある場合:

do{ 
//do something, then check the term 
}while(check the term) 

while(check the term){ 
//do something 
} 

をPS:foreachと呼ばれるforループの形式がありますが、標準であるとは確信できませんので、まだ使用しません。