【问题标题】:Loop only executing first statement [closed]循环仅执行第一条语句[关闭]
【发布时间】:2014-06-06 17:09:54
【问题描述】:

我正在练习循环,我想我会用一个简单的战斗模拟来让它变得有趣。我不知道为什么,但是 doBattle 循环只调用 BattleMenu 而不会提醒其他任何东西。我错过了什么/误解了什么?欢迎任何关于改进代码的建议。

doBattle(player, goblin_01);

function battleMenu(){
        selection = prompt("\n Battle menu\n1: Attack\n2: Defend\n3: Abilities\n4: Status\n5: Enemy Status\n Enter a choice: ");
        // Checks for valid input
        while (selection > 5 || selection < 1){
            selection = prompt("Invalid choice.\n Enter a choice(1-5)");
        }
}

function doBattle(x,y){
    do { battleMenu();
        switch(selection){
            case 1: // do stuff
                break;
            case 2: // do other stuff
                break;
            case 3: // alternative stuff
                        break; 
            case 4: // not stuff but things
                break;
            case 5: // something irrelevant to the topic
                break;
                } // End of Selection Switch

            } while // condition that became false

    }

编辑:正如 Ian 在 OP 中首次评论的那样,问题是我传递了一个字符串但测试整数。我忘了转换类型,偶数是作为字符串输入的。这些案例使代码错综复杂,我假设这就是它被搁置的原因。但希望现在它可以派上用场了。

【问题讨论】:

  • 我认为你应该尝试重构这个大循环。
  • selection 包含一个字符串,而您将 case数字 一起使用。将您的开关/大小写更改为使用字符串,或将 prompt 返回值转换为数字
  • 在你的prompts 前面放一个+ 可以“修复”它:jsfiddle.net/3m9Qb - 尽管代码还有很多工作要做
  • 谢谢伊恩!就是这样。我完全忘记了将字符串转换为数字!

标签: javascript loops infinite-loop do-while


【解决方案1】:

您的代码的问题是 dataTypeselection 变量。变量selection 被视为String,但在switch 语句中,您使用Integer dataType 进行比较。所以你可以使用dataType的转换方法得到Integer的值...

    var m=parseInt(selection);
      switch(m){
      ............
      ............

这是工作的Fiddle

【讨论】:

    【解决方案2】:

    您的选择变量似乎没有定义或传递给 doBattle。尝试在声明 player 和 goblin_01 对象的代码顶部声明变量

    【讨论】:

    • 我试过了。这不是问题,为了简洁起见,我没有包含它(这段代码还有很多内容,但大多不相关)。
    猜你喜欢
    • 1970-01-01
    • 2014-06-21
    • 2020-06-03
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多