为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

精慕HU 2023-08-10 15:41:08
我正在制作 21 点游戏(也称为二十一点),我不确定为什么我的程序忽略这个条件语句,如果用户的牌值高于 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 extracard;alert(`Your card numbers are ${cardOne} and ${cardTwo}!`);//user gets to draw 5 cards in totalfor(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 belowelse 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();
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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


有很多方法可以解决这个问题。一种解决方案是将卡总检查移至主 if...else 逻辑之后的单独 if 条件中。像这样的东西:


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){

    // ...

  }

  else if (input === "1"){

    // ...

  }

  else if (input === "0"){

    // ...

  }


  // Keep separate from the main if...else logic to ensure it always gets run.

  if (cardTotal >=22){

    i+=3;

  }

}


查看完整回答
反对 回复 2023-08-10
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

问题是它是 的一部分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 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;

    } else {

        alert("Lmao wrong input you rart");

    }

    //problem below

    if (cardTotal >= 22) {

        i += 3;

    }

    //not working, loop will not end.


}



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();


查看完整回答
反对 回复 2023-08-10
?
湖上湖

TA贡献2003条经验 获得超2个赞

尝试使用该break语句。试试这个:


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){

    // ...

  }

  else if (input === "1"){

    // ...

  }

  else if (input === "0"){

    // ...

  }

  

  if (cardTotal >=22){

    //i += 3;

    break;

  }

}

现在我明白了,它需要分开



查看完整回答
反对 回复 2023-08-10
  • 3 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信