Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
while循环javascript逻辑_Javascript_Loops - Fatal编程技术网

while循环javascript逻辑

while循环javascript逻辑,javascript,loops,Javascript,Loops,有人能给我解释一下吗?这是自由密码营中罗马数字挑战赛的一部分——这不是我的,我自己做的,但更多的是密码。我试图理解这一点来提高我自己。不管怎么说,while循环完全把我搞砸了。任何帮助都会很棒 function romans(num){ var roman = ""; var romanNumerals = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]; var numbers = [1000,90

有人能给我解释一下吗?这是自由密码营中罗马数字挑战赛的一部分——这不是我的,我自己做的,但更多的是密码。我试图理解这一点来提高我自己。不管怎么说,while循环完全把我搞砸了。任何帮助都会很棒

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))
函数romans(num){
var roman=“”;
数字=[“M”、“CM”、“D”、“CD”、“C”、“XC”、“L”、“XL”、“X”、“IX”、“V”、“IV”、“I”];
变量数=[1000900500400100,90,50,40,10,9,5,4,1];
对于(变量i=0;i=number[i]){
罗马=罗马+罗马数字[i]
//5减1000?
num=num-数字[i]
}
}
返回罗马;
}
控制台日志(罗马书(5))

num
以所需的输入开始,然后您可以找到从最大的罗马数字(
数字[0]
)开始加起来的数字

重复while循环,因为您可能需要该字母的多个副本(即,
“III”==3

romans(5)
将不会触发while循环,直到
numbers[10]
(因为正如您所说的
5>=1000==false
),此时您将字符V附加到
roman
,并从
num
中减去5。while循环将不再触发,因为
num
现在为0

试着用romans(3001)仔细思考一下,你会看到while循环对M/1000触发3次,然后跳过10次,然后对I/1触发一次
函数romans(num){
var roman=“”;
变量罗马数字=[“M”、“CM”、“D”、“CD”、“C”、“XC”、“L”、“XL”、“X”,
“九”、“五”、“四”、“一”];
变量数=[1000900500400100,90,50,40,10,9,5,4,1];
对于(变量i=0;i=number[i]){
控制台日志(“输入”);
罗马=罗马+罗马数字[i]
//5减1000?
num=num-数字[i]
log('减法:'+数字[i]);
}
}
返回罗马
}

console.log(romans(44))
/5减1000?
只有当数学被完全破坏并且
5>=1000
将为真:)对于
num==5
而言,
while
循环将只对
i==10
执行一次,并使im变慢:'(