【问题标题】:Statement gets skipped when correct input is given the first time but not after a re-prompt?当第一次给出正确的输入但在重新提示后没有给出正确的输入时,语句被跳过?
【发布时间】:2014-10-12 19:20:50
【问题描述】:

我遇到了一个被跳过的语句的问题,还有一个无限循环,我无法弄清楚为什么它是无限的,因为它似乎在给出正确的输入时结束。

这里有一个小提琴,所以你可以更容易地理解发生了什么:http://jsfiddle.net/z03ffn2j/

在 else 语句中,我正在运行一个 while 循环,只要当前玩家尝试在 askPlayer 函数中问自己问题,该循环就会运行。所以如果一个玩家被命名为“chris”并且那个玩家输入了“chris”,提示符就会再次出现。

一切都很好,但是......但是,当我第一次输入“chris”时,它会重新提示因为是我自己,然后我输入“tommy”,它不会跳过var code 语句。所以我的问题是,为什么我第一次输入正确的名字时会跳过它,但如果我先输入一个错误的名字然后输入一个正确的名字就不会?

var playerArray = []; //Contains player objects
var turn = 0; //Keeps track of whose turn it is

function askPlayer() {
    var askedPlayer = prompt('Which player do you want to ask?');
    return askedPlayer;
}

//While the pairCount is less than 13(maximum possible pairs)
while (pairCount < maxPairs) {

    if (playerArray[turn].totalCards == 0) {
    drawCard(); 
    }

    else {
        var wrongInput = true;
        var player = askPlayer();

        while (wrongInput) {

            if (player === playerArray[turn].name) {
                player = askPlayer();
                if (player != playerArray[turn].name) {
                    wrongInput = false;    
                }
            }
        }

    var card = askCard(player); //<--- This statement gets skipped
}

pairCount = 13; //Prevents infinite loop for now
turn++;

if (turn == playerNum - 1) { //If everyone has made their turn, reset to player1 again
    turn = 0;
}

}

【问题讨论】:

    标签: javascript


    【解决方案1】:

    当你输入的玩家名字不等于当前回合的玩家名字时,你会进入一个无限循环。

    你有:

    var wrongInput = true;
    var player = askPlayer();
    while (wrongInput) {
        if (player === playerArray[turn].name) {
            player = askPlayer();
            if (player != playerArray[turn].name) {
                wrongInput = false;
            }
        }
    }
    var card = askCard(player);
    

    如您所见,第一次进入循环时,wrongInput 将是 true。假设玩家的名字分别是ab,而您将b 回答为askPlayer(),则第一个if 语句将是错误的(playerbplayerArray[0].name 是@987654332) .

    由于循环中没有其他代码,它会直接跳转到 while (wrongInput) 评估...现在您陷入了一个永无止境的循环。

    所以,您似乎在player = askPlayer() 之后忘记了一个右括号。

    修复它,而不是:

    if (player === playerArray[turn].name) {
        player = askPlayer();
        if (player != playerArray[turn].name) {
            wrongInput = false;
        }
    }
    

    ...写:

    if (player === playerArray[turn].name) {
        player = askPlayer();
    }
    if (player != playerArray[turn].name) {
        wrongInput = false;
    }
    

    或者,更好:

    if (player === playerArray[turn].name) {
        player = askPlayer();
    } else {
        wrongInput = false;
    }
    

    【讨论】:

    • 我怎么会忘记 else 语句.. 盯着我的代码这么久没有注意到它,哈哈。有时我发誓我是弱智。谢谢你的回答,谢谢。
    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多