JavaScript循环没有在应该结束时结束

JavaScript循环没有在应该结束时结束,javascript,html,for-loop,conditional-statements,Javascript,Html,For Loop,Conditional Statements,我正在制作一个21的游戏(也称为blackjacks),我不知道为什么我的程序忽略了这个条件语句,如果用户的卡值超过21,循环结束,有人能告诉我这里的问题是什么吗?非常感谢。(这段代码还没有完成,请原谅我的混乱。)(另请参阅“下面的问题”的注释) let cardRange=[1,2,3,4,5,6,7,8,9,10]; var cardOne=cardRange[Math.floor(Math.random()*cardRange.length)]; var cardTwo=cardRange

我正在制作一个21的游戏(也称为blackjacks),我不知道为什么我的程序忽略了这个条件语句,如果用户的卡值超过21,循环结束,有人能告诉我这里的问题是什么吗?非常感谢。(这段代码还没有完成,请原谅我的混乱。)(另请参阅“下面的问题”的注释)

let cardRange=[1,2,3,4,5,6,7,8,9,10];
var cardOne=cardRange[Math.floor(Math.random()*cardRange.length)];
var cardTwo=cardRange[Math.floor(Math.random()*cardRange.length)];
var cardTotal=cardOne+cardTwo;
var-comScore=18;
var i;
var外卡;
提醒(`您的卡号是${cardOne}和${cardtow2}!`);
//用户总共可以抽5张牌

对于(i=0;i而言,问题在于它是
else
的一部分,因此只要他们输入
1
0
null
,它就不会命中。您可能只想在最后将其移动到自己的状态:

let cardRange=[1,2,3,4,5,6,7,8,9,10];
var cardOne=cardRange[Math.floor(Math.random()*cardRange.length)];
var cardTwo=cardRange[Math.floor(Math.random()*cardRange.length)];
var cardTotal=cardOne+cardTwo;
var-comScore=18;
var i;
var外卡;
提醒(`您的卡号是${cardOne}和${cardtow2}!`);
//用户总共可以抽5张牌
对于(i=0;i<3;){
var input=prompt(`Which make your card total${cardTotal}。是否要提取另一张卡?(输入1表示是,输入0表示否,或选择“取消”返回主页。)`);
如果(输入===null){
i+=3;
window.location.replace(“http://stackoverflow.com");
}否则如果(输入==“1”){
i++;
extraCard=cardRange[Math.floor(Math.random()*cardRange.length)];
警报(`这张卡的号码是${extraCard}!`);
cardTotal=外卡+cardTotal;
}否则如果(输入=“0”){
i+=3;
}否则{
警报(“Lmao输入错误,您很少”);
}
//下面的问题
如果(卡片总数>=22){
i+=3;
}
//不工作,循环将不会结束。
}
功能浮筒输出(){
如果(cardTotal>comScore&&cardTotal<22){
写(`你得到${cardTotal},AI玩家得到${comScore}。这意味着……你赢了!`);
}否则如果(cardTotal==comScore){
写(`你得到${cardTotal},AI玩家得到${comScore}。这意味着……这是一个平局!`);
}
//如果用户达到22以上,则输出
否则如果(cardTotal>=22){
警惕(“半身像!”);
写下(`你的卡号是${cardTotal},高于21。这意味着……你输了!`);
}
//如果第29行被选中,会发生什么^
否则{
write(`你得到${cardTotal},AI玩家得到${comScore}。这意味着……你输了!`);
}
}

pontoonOutput();
问题在于它是
else
的一部分,因此只要他们输入
1
0
null
,它就不会被击中。您可能只想在最后将它移动到自己的状态:

let cardRange=[1,2,3,4,5,6,7,8,9,10];
var cardOne=cardRange[Math.floor(Math.random()*cardRange.length)];
var cardTwo=cardRange[Math.floor(Math.random()*cardRange.length)];
var cardTotal=cardOne+cardTwo;
var-comScore=18;
var i;
var外卡;
提醒(`您的卡号是${cardOne}和${cardtow2}!`);
//用户总共可以抽5张牌
对于(i=0;i<3;){
var input=prompt(`Which make your card total${cardTotal}。是否要提取另一张卡?(输入1表示是,输入0表示否,或选择“取消”返回主页。)`);
如果(输入===null){
i+=3;
window.location.replace(“http://stackoverflow.com");
}否则如果(输入==“1”){
i++;
extraCard=cardRange[Math.floor(Math.random()*cardRange.length)];
警报(`这张卡的号码是${extraCard}!`);
cardTotal=外卡+cardTotal;
}否则如果(输入=“0”){
i+=3;
}否则{
警报(“Lmao输入错误,您很少”);
}
//下面的问题
如果(卡片总数>=22){
i+=3;
}
//不工作,循环将不会结束。
}
功能浮筒输出(){
如果(cardTotal>comScore&&cardTotal<22){
写(`你得到${cardTotal},AI玩家得到${comScore}。这意味着……你赢了!`);
}否则如果(cardTotal==comScore){
写(`你得到${cardTotal},AI玩家得到${comScore}。这意味着……这是一个平局!`);
}
//如果用户达到22以上,则输出
否则如果(cardTotal>=22){
警惕(“半身像!”);
写下(`你的卡号是${cardTotal},高于21。这意味着……你输了!`);
}
//如果第29行被选中,会发生什么^
否则{
write(`你得到${cardTotal},AI玩家得到${comScore}。这意味着……你输了!`);
}
}

pontoonOutput();
问题在于,您在相同的if…else语句中检查卡片总数,但在检查“0”或“1”输入之后。因此,如果用户输入“0”或“1”,您的代码将处理这些条件,并且永远不会进行卡片总数检查

有许多方法可以解决此问题。一种解决方案是将卡总检查移动到一个单独的if条件中,在主if…else逻辑之后。类似如下:

for(i=0;i=22){
i+=3;
}
}

问题在于,您在同一if…else语句中检查卡片总数,但在检查“0”或“1”输入之后。因此,如果用户输入“0”或“1”,您的代码将处理这些条件,并且它将永远无法进行卡片总数检查

有许多方法可以解决此问题。一种解决方案是将卡总检查移动到一个单独的if条件中,在主if…else逻辑之后。类似如下:

for(i=0;i=22){
i+=3;
}
}

尝试使用
break
语句。 试试这个
let cardRange = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var cardOne = cardRange[Math.floor(Math.random()*cardRange.length)];
var cardTwo = cardRange[Math.floor(Math.random()*cardRange.length)];
var cardTotal = cardOne + cardTwo;
var comScore = 18;
var i;
var extracard;


alert(`Your card numbers are ${cardOne} and ${cardTwo}!`);
//user gets to draw 5 cards in total
for(i = 0; i<3;){
var input = prompt(`Which makes your card total ${cardTotal}. Would you like to draw another card? (Type in 1 for yes, 0 for no, or select cancel to return to home.)`);


if (input === null){
    i+=3;
    window.location.replace("http://stackoverflow.com");
}
else if (input === "1"){
    i++;
    extraCard = cardRange[Math.floor(Math.random()*cardRange.length)];
    alert(`This card's number is ${extraCard}!`);
    cardTotal = extraCard + cardTotal;

}
else if (input === "0"){
    i+=3;
}
//problem below
else if (cardTotal >=22){
    i+=3;
}
//not working, loop will not end.
else{
alert("Lmao wrong input you rart");
}
}


function pontoonOutput(){
    if (cardTotal > comScore && cardTotal < 22){
        document.write(`You got ${cardTotal}, and the AI player got ${comScore}. Which means.... You win!`);
    }
    else if (cardTotal === comScore){
        document.write(`You got ${cardTotal}, and the AI player got ${comScore}. Which means.... It is a tie!`);
    }
    //this outputs if the user gets above 22
    else if (cardTotal >= 22){
        alert("BUST!");
        document.write(`Your card number is ${cardTotal}, which is above 21. Which means.... You lose!`);
    }
    //what should happen if line 29 is picked up. ^
    else{
        document.write(`You got ${cardTotal}, and the AI player got ${comScore}. Which means.... You lose!`);
    }
    }
    
    pontoonOutput();