*更新* 现在我的程序可以编译但没有 运行?

*UPDATE* now my program compiles but doesn't run?

我正在编写一个程序,提示用户对着计算机玩剪刀石头布。我在从 main 方法调用 int rpsls 方法时遇到问题。我不确定如何从 main 方法调用它,因为我需要将来自 main 方法的用户输入值输入到 rpsls 方法中。以下是我到目前为止的内容,是的,它充满了错误,但我主要关心调用方法。

UPDATE - 我添加了更多代码,现在程序可以编译了。但是,当我尝试 运行 它只是冻结。任何人都可以帮助找到解决方案来制作程序运行吗?

import java.util.Scanner; 
public class Rpsls
{  



   public static void main (String [] args) {
      int wins = 0;
      int ties = 0;
      int losses = 0;
      int retVal = 0;
      int output = rpsls(retVal);
      //while loop 
      Scanner input = new Scanner (System.in);
      int x = input.nextInt();
         while (x > 0 && x <= 5) {
            //input gesture 

            System.out.println(" ROCK PAPER SCISSORS LIZARD SPOCK");
            System.out.println(" (1)   (2)     (3)     (4)    (5)");
            System.out.print("Enter your choice, or 0 to end: ");

            //call rpsls for inputted gesture
            int gesture = input.nextInt();
            rpsls(gesture);
            //returned values: loss, win, or tie
            if (output == -1 ) {
               losses++;
            }
               else if (output == 0) {
                  ties++;
               }
            else {
               wins++;
            }
            //count wins and losses 
            //end while loop 
            //print sum of wins and losses. 
         }
         System.out.println("You won " + wins + " games, lost " + losses + " games, and tied " + ties + " games.");

   }

   public static int rpsls(int gesture) {
      //generate random gesture for computer 
      int attack = (int)(Math.random()*5);
      //decide who won 
           int wins = 0; int losses = 0; int ties = 0;
           int retVal = 0;     

            if (gesture == 1 && attack == 1) {
               System.out.println("You chose ROCK.");
               System.out.println("Computer chose ROCK.");
               System.out.println("It's a tie!");
               retVal = 0;
            }
            if (gesture == 1 && attack == 2) {
               System.out.println("You chose ROCK.");
               System.out.println("Computer chose PAPER.");
               System.out.println("PAPER covers ROCK.");
               System.out.println("Computer wins!");
               retVal = -1;
            }
            if (gesture == 1 && attack == 3) {
               System.out.println("You chose ROCK.");
               System.out.println("Computer chose SCISSORS.");
               System.out.println("ROCK crushes SCISSORS.");
               System.out.println("You win!");
               retVal = 1;
            }
            if (gesture == 1 && attack == 4) {
               System.out.println("You chose ROCK.");
               System.out.println("Computer chose LIZARD.");
               System.out.println("ROCK crushes LIZARD.");
               System.out.println("You win!");
               retVal = 1;
            }
            if (gesture == 1 && attack == 5) {
               System.out.println("You chose ROCK.");
               System.out.println("Computer chose SPOCK.");
               System.out.println("SPOCK vaporizes ROCK.");
               System.out.println("Computer wins!");
               retVal = -1;
            }
            if (gesture == 2 && attack == 1) {
               System.out.println("You chose PAPER.");
               System.out.println("Computer chose ROCK.");
               System.out.println("PAPER covers ROCK.");
               System.out.println("You win!");
               retVal = 1;
            }
            if (gesture == 2 && attack == 2) {
               System.out.println("You chose PAPER.");
               System.out.println("Computer chose PAPER.");
               System.out.println("It's a tie!");
               retVal = 0;
            }
            if (gesture == 2 && attack == 3) {
               System.out.println("You chose PAPER.");
               System.out.println("Computer chose SCISSORS.");
               System.out.println("SCISSORS cut PAPER.");
               System.out.println("Computer wins!");
               retVal = -1;
            }
            if (gesture == 2 && attack == 4) {
               System.out.println("You chose PAPER.");
               System.out.println("Computer chose LIZARD.");
               System.out.println("LIZARD eats PAPER.");
               System.out.println("Computer wins!");
               retVal = -1;
            }
            if (gesture == 2 && attack == 5) {
               System.out.println("You chose PAPER.");
               System.out.println("Computer chose SPOCK.");
               System.out.println("PAPER disproves SPOCK.");
               System.out.println("You win!");
               retVal = 1;
            }
            if (gesture == 3 && attack == 1) {
               System.out.println("You chose SCISSORS.");
               System.out.println("Computer chose ROCK.");
               System.out.println("ROCK crushes SCISSORS.");
               System.out.println("Computer wins!");
               retVal = -1;
            }
            if (gesture == 3 && attack == 2) {
              System.out.println("You chose SCISSORS.");
              System.out.println("Computer chose PAPER.");
              System.out.println("SCISSORS cut PAPER.");
              System.out.println("You win!");
              retVal = 1;
            }
            if (gesture == 3 && attack == 3) {
              System.out.println("You chose SCISSORS.");
              System.out.println("Computer chose SCISSORS.");
              System.out.println("It's a tie!");
              retVal = 0;
            }
            if (gesture == 3 && attack == 4) {
              System.out.println("You chose SCISSORS.");
              System.out.println("Computer chose LIZARD.");
              System.out.println("SCISSORS decapitate LIZARD.");
              System.out.println("You win!");
              retVal = 1;
            }
            if (gesture == 3 && attack == 5) {
              System.out.println("You chose SCISSORS.");
              System.out.println("Computer chose SPOCK.");
              System.out.println("SPOCK smashes SCISSORS.");
              System.out.println("Computer wins!");
              retVal = -1;
            }
            if (gesture == 4 && attack == 1) {
              System.out.println("You chose LIZARD.");
              System.out.println("Computer chose ROCK.");
              System.out.println("ROCK crushes LIZARD.");
              System.out.println("Computer wins!");
              retVal = -1;
            }
            if (gesture == 4 && attack == 2) {
              System.out.println("You chose LIZARD.");
              System.out.println("Computer chose PAPER.");
              System.out.println("LIZARD eats PAPER.");
              System.out.println("You win!");
              retVal = 1;
            }
            if (gesture == 4 && attack == 3) {
              System.out.println("You chose LIZARD.");
              System.out.println("Computer chose SCISSORS.");
              System.out.println("SCISSORS decapitate LIZARD.");
              System.out.println("Computer wins!");
              retVal = -1;
            }
            if (gesture == 4 && attack == 4) {
              System.out.println("You chose LIZARD.");
              System.out.println("Computer chose LIZARD.");
              System.out.println("It's a tie!");
              retVal = 0;
            }
            if (gesture == 4 && attack == 5) {
              System.out.println("You chose LIZARD.");
              System.out.println("Computer chose SPOCK.");
              System.out.println("LIZARD poisons SPOCK.");
              System.out.println("You win!");
              retVal = 1;
            }
            if (gesture == 5 && attack == 1) {
              System.out.println("You chose SPOCK.");
              System.out.println("Computer chose ROCK.");
              System.out.println("SPOCK vaporizes ROCK.");
              System.out.println("You win!");
              retVal = 1;
            } 
            if (gesture == 5 && attack == 2) {
              System.out.println("You chose SPOCK.");
              System.out.println("Computer chose PAPER.");
              System.out.println("PAPER disproves SPOCK.");
              System.out.println("Computer wins!");
              retVal = -1;
            }
            if (gesture == 5 && attack == 3) {
              System.out.println("You chose SPOCK.");
              System.out.println("Computer chose SCISSORS.");
              System.out.println("SPOCK smashes SCISSORS.");
              System.out.println("You win!");
              retVal = 1;
            }
            if (gesture == 5 && attack == 4) {
              System.out.println("You chose SPOCK.");
              System.out.println("Computer chose LIZARD.");
              System.out.println("LIZARD poisons SPOCK.");
              System.out.println("Computer wins!");
              retVal = -1;
            }
            if (gesture == 5 && attack == 5) {
              System.out.println("You chose SPOCK.");
              System.out.println("Computer chose SPOCK.");
              System.out.println("It's a tie!");
              retVal = 0;
            } 
            return retVal;
   }

}

这一行:

int rpsls = gesture(x);

...在您的 main 函数中创建一个名为 rpslsint 变量,调用一个名为 gesture 的方法,并将 x 传递给它.

您的意思可能是:

int gesture = input.nextInt();
rpsls(gesture);

...在您的 Scanner 上调用 nextInt 以从用户那里获取号码,将其记为 gesture,然后 调用 你现有的 rpsls 方法,传入 gesture.

  1. 您正在调用 gesture(int) 并且您可能正在尝试调用 int rpsls(int gesture) int retVal = rpsls(gesture);
  2. 一些变量在影响其生命周期的代码块内初始化和声明,例如 input 在 while 块内,因此它不会在 while 块之外工作;
  3. int rpsls(int gesture) 设计不当:计算机应该为 rock/paper/scissors 选择一个随机值,然后与用户进行比较;

您的代码无效,您至少需要:

  • while (x > 0 && x <= 5)声明之后移动int x = input.nextInt();,没有这个它不会使用你的游戏输入,
  • 在第一次使用之前移动 Scanner 声明,因为它不会编译,
  • 更改 'gesture' 上 rpsls 方法中的所有 'x',rpsls 方法无法访问 'x' 变量形式的主方法;
  • 初始化'retVal'变量(给它一个值),例如0,以避免编译错误;
  • 改变int rpsls = gesture(x);例如int rpsls = rpsls(x);这样,它将根据您的输入继续

经过这些更改后,我认为它工作正常。

编辑: 您应该从 main 中删除 int output = rpsls(retVal); 和 retVal 声明,因为我认为它没有用,并在 x = input.nextInt(); 之后添加 int output = rpsls(x); 然后它可以正常工作。 同时将 int x = input.nextInt(); 替换为 int gesture = input.nextInt();