2016-09-16 123 views
-2

任何人都可以解释这个while循环对我吗?它是免费代码营罗马数字挑战的一部分 - 这不是我的,我做了我自己的,但它是更多的代码。我试图理解这一点来改善我自己。无论如何,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开始为所需的输入,然后你发现,加起来num开始,最大的罗马数字(numbers[0])的数字。

您与while循环重复,因为你可能需要的信的多个副本(即"III" == 3

romans(5)不会触发while循环,直到numbers[10](因为你说5 >= 1000 == false)在这一点上,你追加字符V到roman,从num减去5。 while循环将不会再次触发,因为num现在为0.

试着用romans(3001)来思考它,你会看到M/1000的while循环触发3次,然后跳过10次,然后触发一次I/1

+1

Dangit im slow:'( – 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:

在它会去ŧ通过数组数组,直到它找到一个数字然后44(在while循环从未进入的迭代期间)。

当它找到一个小于44的数字时,它进入while循环,并在该迭代中获得位置i处的romanNumerals,在这种情况下为40.然后它将原始数字降低40(44-40 = 4)然后退出循环返回搜索一个低于4的数字。