2016-09-16 6 views
-2

誰もこのループを私のために説明できますか?ローマ数字の一部はフリーコードキャンプに挑戦しています。それは私のものではなく、私は自分のものでしたが、もっとコードがありました。私は自分自身を改善するためにこれを理解しようとしています。とにかく、whileループは完全に私を投げています。どんな助けも素晴らしいだろう。所望の入力としてwhileループのJavaScriptロジック

function romans(num){ 
    var roman = ""; 
    var romanNumerals = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]; 
    var numbers = [1000,900,500,400,100,90,50,40,10,9,5,4,1]; 

    for (var i=0; i<numbers.length; i++) { 
     //If the num was 5 then then it would read 5 greater than 1000? 
     while (num >= numbers[i]) { 
      roman = roman + romanNumerals[i] 
      //5 minus 1000? 
      num = num - numbers[i] 
     } 
    } 

    return roman; 
} 

console.log(romans(5)) 
+0

'// 5マイナス1000?'数学が完全に壊れていて、 '5> = 1000'が真である場合のみ:)' num === 5'' while'ループは 'i === 10'のために一度だけ実行されます – Andreas

答えて

1

num開始、その後、あなたは最大のローマ数字(numbers[0])から始まる、numまで追加番号を見つけます。あなたが追加するこの時点で(、あなたは5 >= 1000 == falseを言うようにするので)あなたは手紙のコピーを複数必要になる場合がありますので、あなたは(すなわち"III" == 3)whileループで

romans(5)を繰り返し

numbers[10]まで、whileループをトリガしません。文字Vをromanに、numから5を減算します。 numが今や0になるので、whileループは再び起動しません。

romans(3001)で考えるとwhileループトリガーがM/1000に対して3回表示され、10回スキップされた後にI/1

+1

遅くすることを遅らせる: '( – namlik

1

function romans(num){ 
 
var roman = ""; 
 
var romanNumerals=["M","CM","D","CD","C","XC","L","XL","X", 
 
"IX","V","IV","I"]; 
 
var numbers = [1000,900,500,400,100,90,50,40,10,9,5,4,1]; 
 

 
for (var i=0; i<numbers.length; i++){ 
 

 
    //If the num was 5 then then it would read 5 greater than 1000? 
 
    console.log("comparing: " + numbers[i]); 
 
    console.log(" with: " + num); 
 
    while(num >= numbers[i]){ 
 
    console.log("entered"); 
 
     roman = roman + romanNumerals[i] 
 
     //5 minus 1000? 
 
     num = num - numbers[i] 
 
     console.log('subtracting: ' + numbers[i]); 
 
     } 
 
    } 
 
    return roman 
 
} 
 
console.log(romans(44))

それが小さいものを見つけるまでそれは数字の行を下に移動します例:44:

それはトンを行くよためにwhileループが決して入力されない前の反復の間に44を見つけ出すまで、numbers配列を渡ります。

数値が44より小さい場合は、whileループに入り、iterationのiの位置(この場合は40)でromanNumeralsをとります。次に、元の数値を40(44-40 = 4)だけ下げます。 forループを抜けて4より小さい数を検索します。

関連する問題