简体   繁体   中英

What is the reason my function wont restart?

Everything works fine but when i try to re run the function it is stuck on the alert box what did i do wrong and can anyone explain why its happening.You can look at the comment in the code to see the area im getting this probem

var userChoice = prompt("Do you choose rock, paper or scissors?");
 var computerChoice = Math.random();
    if (computerChoice < 0.34) {
            computerChoice = "rock";
        } else if(computerChoice <= 0.67) {
            computerChoice = "paper";
        } else {
            computerChoice = "scissors";
        } console.log("Computer: " + computerChoice);
        var compare = function(choice1,choice2){
            if (choice1 === choice2){
                return "The result is a tie!";

           }else if (choice1 === "rock"){
             if(choice2 === "scissors"){
                 return("rock wins");
             }else{
                return("paper wins");   
             }

           }else if (choice1 === "paper"){
                if(choice2 === "rock"){
                    return("paper wins");
                }else{
                    return("scissors wins");
                }
           }else if(choice1 === "scissors"){
               if(choice2 === "rock"){
                   return("rock wins");
               }else{
                   return("scissors wins");
               }
           }else if (choice1 != "rock"&&"paper"&&"scissors"){
                    alert("not a viable input,please try again");
                    compare(userChoice,computerChoice);
    //calling the function here makes the alert box repeatedly pop up

           }

        };
        compare(userChoice,computerChoice);

You can set a flag and put everything in a while loop.

var finished = false;

var compare = function (choice1, choice2) {
   if (choice1 === choice2) {
       finished = true;
       return "The result is a tie!";
   } else if (choice1 === "rock") {
       if (choice2 === "scissors") {
       finished = true;
       return ("rock wins");
    } else {
       finished = true;
       return ("paper wins");
    }

} else if (choice1 === "paper") {
    if (choice2 === "rock") {
        finished = true;
        return ("paper wins");
    } else {
        finished = true;
        return ("scissors wins");
    }
} else if (choice1 === "scissors") {
    if (choice2 === "rock") {
        finished = true;
        return ("rock wins");
    } else {
        finished = true;
        return ("scissors wins");
    }
} else if (choice1 != "rock" && "paper" && "scissors") {
    alert("not a viable input,please try again");
    finished = false;
    //compare(userChoice, computerChoice); This causes recursion. Not necessary.

}

};

while (!finished) {
   var userChoice = prompt("Do you choose rock, paper or scissors?");
   var computerChoice = Math.random();

if (computerChoice < 0.34) {
    computerChoice = "rock";
} else if (computerChoice <= 0.67) {
    computerChoice = "paper";
} else {
    computerChoice = "scissors";
}

console.log("Computer: " + computerChoice);

alert(compare(userChoice, computerChoice));
}

Take a look at this fiddle http://jsfiddle.net/7p94axhp/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM