Java while循环在一次迭代后停止

Ric*_*ose 1 java loops while-loop

我正在尝试创建一个岩石,纸张,剪刀,蜥蜴,spock程序,重复自己,直到用户选择退出.但是,我无法弄清楚如何使程序循环.它在一场比赛后继续存在.我认为这可能与我的while语句的设置方式有关,但我不完全确定如何解决它.谢谢.

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

}
Run Code Online (Sandbox Code Playgroud)

谢谢你的指点.我改变了我的while循环后

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

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

        //Determining the winner
        {
            String winner;
             ...etc.
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

   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)
Run Code Online (Sandbox Code Playgroud)

从我的研究来看,似乎我的扫描仪没有找到任何东西可读,但我不知道如何,因为它应该是读取用户输入.

T.J*_*der 7

您的

while (round >= 0)
{
    round++;
}
Run Code Online (Sandbox Code Playgroud)

... 除了增加round变量直到它回绕到零(大约40亿次循环之后)之外什么都不做.然后其余的代码运行.将其余代码移动循环中.

例如:

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

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

    String winner;

    // ...etc.
}
Run Code Online (Sandbox Code Playgroud)

另请注意,以下大括号是多余的:

   {
     uMove = getuMove();
     cMove = getcMove();
   }
Run Code Online (Sandbox Code Playgroud)

这可以写成:

   uMove = getuMove();
   cMove = getcMove();
Run Code Online (Sandbox Code Playgroud)