2014-10-12 2 views
0

나는 생략됩니다 성명에 문제가하고있어 또한 정확한 입력이 제공되었을 때 끝납니다 이후 무한 왜 내가 알아낼 수 없습니다 무한 루프. else 문에서 http://jsfiddle.net/z03ffn2j/문은 생략됩니다?

내가 한 현재 플레이어가 askPlayer 기능에 자신에게 질문을하려고으로 실행 while 루프를 실행 해요 : 당신은 쉽게 무슨 일이 일어나고 있는지 이해할 수 있도록

는 여기에 바이올린입니다. 따라서 플레이어의 이름이 "chris"이고 플레이어가 "chris"라고 입력하면 프롬프트가 다시 나타납니다.

처음에는 "chris"를 입력하지 않고 대신 "tommy"라고 말하면, 값을 묻는 var card 문을 건너 뜁니다. 나는 "크리스"처음 입력 할 때 자신을, 그리고 다음 나는 "토미"를 입력 사촌 그러나, 그것이 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; 
} 

} 

답변

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

은, 루프를 입력 1 시간, wrongInputtrue 될 것입니다. 플레이어의 이름은 각각 ab을하고 당신이 askPlayer()b 대답 가정하면, 1 if 문 (playerb하고 playerArray[0].namea입니다) 잘못된 것입니다. 당신은 루프 내부에 다른 코드가 없기 때문에

, 그것은합니다 ... while (wrongInput) 평가로 바로 이동합니다 지금 당신은 끝없는 루프에 갇혀 있습니다.

그래서, 당신이 player = askPlayer() 후 1 닫는 대괄호를 잊어 버린 것 같다. 더 나은 아직,

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; 
} 
+0

가 어떻게 else 문을 잊을 수 .. 그것을 알아 채지 않고 오랫동안 내 코드를 쳐다 보면서, 하하. 때로는 정신적으로 장애가 있다고 맹세합니다. 대답 주셔서 감사합니다. 감사합니다. – Chrillewoodz