1

I'm trying to create a rock, paper, scissors, lizard, spock program that repeats itself until the user chooses to exit. However, I can't figure out quite how to make the program loop. It keeps exiting after one game. I think it might have to do with how my while statement is set up, But I'm not entirely sure what to do to fix it. Thanks.

import java.util.Scanner;
import java.util.Random;

public class project2_rpsls {

public static void main(String[] args) 
{
    int round=0;
    String uMove = null, cMove = null/*, loop*/;
    Scanner scan=new Scanner(System.in);
    /*System.out.println("Would you like to play?");
    loop=scan.next();
    loop=loop.toUpperCase();
    while (loop.equals("Y"))*/

        while (round>=0) 
        {
            round++;
        }
        //get the moves
        {
        uMove = getuMove();
        cMove = getcMove();
        }
        //Determining the winner
        {
            String winner;
                if (cMove.equals(uMove))
                        {
                        winner="It was a tie!";
                        }
                else if (uMove.equals("ROCK") && cMove.equals("LIZARD") ||
                        uMove.equals ("ROCK") && cMove.equals("SCISSORS"))
                        {
                        winner="You Win!";
                        }
                else if (uMove.equals("PAPER") && cMove.equals("ROCK") ||
                        uMove.equals ("PAPER") && cMove.equals("SPOCK"))
                        {
                        winner="You Win!";
                        }
                else if (uMove.equals("SCISSORS") && cMove.equals("PAPER") ||
                         uMove.equals ("SCISSORS") && cMove.equals("LIZARD"))
                        {
                        winner="You Win!";
                        }
                else if (uMove.equals("LIZARD") && cMove.equals("SPOCK") ||
                         uMove.equals ("LIZARD") && cMove.equals("PAPER"))
                        {
                        winner="You Win!";
                        }
                else if (uMove.equals("SPOCK") && cMove.equals("SCISSORS") ||
                         uMove.equals ("SPOCK") && cMove.equals("ROCK"))
                        {
                        winner="You Win!";
                        }
                else 
                        {
                        winner="You Lose!";
                        }
            System.out.println("The computer picked " + cMove + " -- " + winner);
            }

            scan.close();
}


//Get user's move
private static String getuMove() 

{
Scanner scan=new Scanner(System.in);
    String uMove="test";
    while (!uMove.equals("ROCK") &&
            !uMove.equals ("PAPER")&&
            !uMove.equals("SCISSORS")&&
            !uMove.equals("LIZARD")&&
            !uMove.equals("SPOCK"))
    {
        System.out.println("Please enter your move: ");
        uMove=scan.next();
        uMove=uMove.toUpperCase();  
    }
    scan.close();
    return uMove;

    }

//Get computer's move
private static String getcMove() {
String cMove;
Random cMoveInt = new Random();
int rnum;
rnum=cMoveInt.nextInt(5);

    {
        if (rnum == 1) {
            cMove = "ROCK";
        }
        else if (rnum == 2) {
            cMove = "PAPER";
        }
        else if (rnum == 3){
            cMove = "SCISSORS";
        }
        else if (rnum == 4){
            cMove = "LIZARD";
        }
        else {
            cMove = "SPOCK";
        }

    }

        return cMove;
}

}

Thanks for the pointers. After I changed my while loop to

        while (round>=0) 
        {
            round++;

        //get the moves
        uMove = getuMove();
        cMove = getcMove();

        //Determining the winner
        {
            String winner;
             ...etc.

I got the following error.

   Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at project2_rpsls.getuMove(project2_rpsls.java:82)
at project2_rpsls.main(project2_rpsls.java:22)

From my research, it seems as though my scanner isn't finding anything to read, but I don't see how, because it's supposed to be reading user input.

3
  • May you want to fix the sample code? Taking into account comments, it will get trapped in an infinite loop... Commented Oct 22, 2012 at 20:43
  • Learn about enumerations: docs.oracle.com/javase/tutorial/java/javaOO/enum.html Commented Oct 22, 2012 at 20:45
  • 1
    To the downvoters: why is this not a good question? A novice programmer has a problem, has stated the problem, and shown the code. This is a better question than the countless others that show no code. Commented Oct 22, 2012 at 20:47

1 Answer 1

7

Your

while (round >= 0)
{
    round++;
}

...does nothing but increment the round variable until it wraps around back to zero (after roughly 4 billion loops). Then the rest of your code runs. Move the rest of the code into the loop.

For example:

while (round >= 0)
{
    round++;

    uMove = getuMove();
    cMove = getcMove();

    String winner;

    // ...etc.
}

Also note that the following braces are redundant:

   {
     uMove = getuMove();
     cMove = getcMove();
   }

This can be written as:

   uMove = getuMove();
   cMove = getcMove();
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.