有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

爪哇石头剪刀布游戏(菜单法)

正如它在标题中所说的,我试图创建一个RPS游戏,使用菜单作为一种方法,问题是我不知道如何在任何时候从菜单调用输入。 为了更好地理解,以下是我的代码:

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

public class RockPaperScissors
{
    public static void main (String [] args)
    {
        Scanner keyboard = new Scanner (System.in);
        String player1choice, player1Name;
        int mainMenu,subMenu;
        String again;
        player1Name = "";


    welcomeBanner ();
    mainMenu = getMenu (keyboard);


    if (mainMenu == 1)
    {
        keyboard.nextLine();
        player1Name = getAName (keyboard);

        for (int i = 0; i < 50; ++i) System.out.println();
        main (null);
    }

    if (mainMenu == 2)
    {
        System.out.println("Welcome "+player1Name); //add name input
        subMenu =getsubMenu (keyboard);
        System.out.println("You have chosen: "); //add option chosen

        System.out.println("Cpu has got, It's a Tie!");//cpuChoice add


    }

    if (mainMenu == 3)
    {
        keyboard.nextLine();
        String exitRequest;
        System.out.print("Are you sure you want to exit? (Y/N): ");
        exitRequest = keyboard.nextLine ();
        if (exitRequest.equals("y") || exitRequest.equals("Y"))
        {
            System.out.println("Good Bye!");
            System.exit(0);
        }
        else if (exitRequest.equals("n") || exitRequest.equals("N"))
        {
            for (int i = 0; i < 50; ++i) System.out.println();
            main(null);
        }

    }
}
static void welcomeBanner()
{
    for (int i = 0; i < 60; i++)
    {
        System.out.print('*');
    }
    System.out.println("");
    System.out.println("*        Welcome To The Rock, Paper, Scissors Game         *");
    System.out.println("*----------------------------------------------------------*");
    System.out.println("*     Created by: Jonathan Gutierrez, and I am NoxBot!     *");
    for (int i = 0; i < 60; i++)
    {
        System.out.print('*');
    }
    System.out.println("");
    System.out.println("");
}
static int getMenu (Scanner aKeyboard)
{
    int playermenuChoice;
    System.out.println("1. Enter Player Name");
    System.out.println("2. Play a Game");
    System.out.println("3. Exit Application");
    System.out.println("");
    System.out.print("Enter your choice: ");
    playermenuChoice = aKeyboard.nextInt();
    return playermenuChoice;

}
static int getsubMenu (Scanner aKeyboard)
{
    int submenuChoice;
    System.out.println("Enter 1 for Rock");
    System.out.println("Enter 2 for Paper");
    System.out.println("Enter 3 for Scissors");
    System.out.println("");
    System.out.print("Enter choice: ");
    submenuChoice = aKeyboard.nextInt();
    return submenuChoice;
}
static String getAName (Scanner aKeyboard)
{
    String player1Info;
    System.out.print("Enter your name: ");
    player1Info = aKeyboard.nextLine ();
    return player1Info;
}
static String computerChoice ()
{
    String cpuChoice;
    cpuChoice = "";
    Random randomNumbers = new Random();
    int cpu = randomNumbers.nextInt (2) + 1;
    switch (cpu)
    {
        case 1:
        cpuChoice = "Rock";
        break;
        case 2:
        cpuChoice = "Paper";
        break;
        case 3:
        cpuChoice = "Scissors";
        break;
    }
    return cpuChoice;
}

所以,当播放器选择选项1时,程序要求输入播放器的名称,我希望在任何时候使用该输入(最具体的是当mainMenu==2时)。我该怎么做

编辑:这是我的新代码:

import java.util.Scanner;
import java.util.Random;
public class RockPaperScissors
{
    public static void main (String [] args)
    {
        Scanner keyboard = new Scanner (System.in);
        String player1choice, player1Name, subMenu;
        int mainMenu;
        String again;
        player1Name = "";

        welcomeBanner ();
        mainMenu = getMenu (keyboard);

    if (mainMenu == 1)
    {
        keyboard.nextLine();
        player1Name = getAName (keyboard);

        for (int i = 0; i < 50; ++i) System.out.println();
        welcomeBanner ();
        mainMenu = getMenu (keyboard);
        System.out.println("");
        System.out.println("Welcome " + player1Name);
        System.out.println("");

    }

    if (mainMenu == 2)
    {

        subMenu =enterPlayersChoice (keyboard);
        keyboard.nextLine();
        String cmpu = computerChoice ();
        for(int i = 0; i < 3; i ++)

        if (subMenu.equals(cmpu))
           System.out.println("It's a tie!");
        else if (subMenu.equals("rock"))
        if (cmpu.equals("scissors"))
        System.out.println("Rock crushes scissors. You win!!");
        else if (cmpu.equals("paper"))
        System.out.println("Paper eats rock. You lose!!");
        else if (subMenu.equals("paper"))
        if (cmpu.equals("scissors"))
        System.out.println("Scissor cuts paper. You lose!!");
        else if (cmpu.equals("rock"))
        System.out.println("Paper eats rock. You win!!");
        else if (subMenu.equals("scissors"))
        if (cmpu.equals("paper"))
        System.out.println("Scissor cuts paper. You win!!");
        else if (cmpu.equals("rock"))
        System.out.println("Rock breaks scissors. You lose!!");
        else   System.out.println("Invalid user input.");
        System.out.println("");


    }

    if (mainMenu == 3)
    {
        keyboard.nextLine();
        String exitRequest;
        System.out.print("Are you sure you want to exit? (Y/N): ");
        exitRequest = keyboard.nextLine ();
        if (exitRequest.equals("y") || exitRequest.equals("Y"))
        {
            System.out.println("Good Bye!");
            System.exit(0);
        }
        else if (exitRequest.equals("n") || exitRequest.equals("N"))
        {
            for (int i = 0; i < 50; ++i) System.out.println();
            main(null);
        }

    }
}
static void welcomeBanner()
{
    for (int i = 0; i < 60; i++)
    {
        System.out.print('*');
    }
    System.out.println("");
    System.out.println("*        Welcome To The Rock, Paper, Scissors Game         *");
    System.out.println("*----------------------------------------------------------*");
    System.out.println("*     Created by: Jonathan Gutierrez, and I am NoxBot!     *");
    for (int i = 0; i < 60; i++)
    {
        System.out.print('*');
    }
    System.out.println("");
    System.out.println("");
}
static int getMenu (Scanner aKeyboard)
{
    int playermenuChoice;
    System.out.println("1. Enter Player Name");
    System.out.println("2. Play a Game");
    System.out.println("3. Exit Application");
    System.out.println("");
    System.out.print("Enter your choice: ");
    playermenuChoice = aKeyboard.nextInt();
    return playermenuChoice;

}
public static String enterPlayersChoice(Scanner aKeyboard)
{
    String input = "";
    System.out.print("You have a choice of picking rock, paper, or scissors: ");
    input = aKeyboard.nextLine();
    String inputLower = input.toLowerCase();
    return inputLower;
 }
static String getAName (Scanner aKeyboard)
{
    String player1Info;
    System.out.print("Enter your name: ");
    player1Info = aKeyboard.nextLine ();
    return player1Info;
}
public static String computerChoice ()
{
    String cpuChoice;
    cpuChoice = "nothing";
    Random randomNumbers = new Random();
    int cpu = randomNumbers.nextInt (2) + 1;
    switch (cpu)
    {
        case 1:
        cpuChoice = "rock";
        break;
        case 2:
        cpuChoice = "paper";
        break;
        case 3:
        cpuChoice = "scissors";
        break;
    }
    return cpuChoice;
}

} 要完成这一步,我希望游戏显示一条消息,无论玩家是赢是输,但它被跳过(主菜单==2)有什么想法吗


共 (1) 个答案

  1. # 1 楼答案

    下面是一种以不同方式重新排列现有应用程序的方法。一些主要更改包括使除主方法外的所有方法都非静态,以及为应用程序的入口点创建RockPaperScissorsNew对象。我还添加了类变量,所以您不需要将扫描器作为对象传递给所有方法

    为了回答您最初的问题,即如何重用用户输入的输入,我提供的解决方案是将该信息保留在类变量中

    import java.util.Random;
    import java.util.Scanner;
    
    
    public class RockPaperScissorsNew {
    
        //Class variables
        Scanner keyboard;
        String player1choice, player1Name; //Name will be stored here.
        int mainMenu,subMenu;
    
        public RockPaperScissorsNew()
        {
            keyboard = new Scanner(System.in);  
            welcomeBanner();  //Display the welcome banner once.
            while(true)       //Repeatedly display the main menu.
                getChoice();  //Get the user's choice
        }
    
        public void getChoice()
        {
            int choice = -1;          //Set choice to fail first.
            while (choice > 3 || choice < 0)  //Wait until user choice passes.
            {
                choice = getMenu();  
            }
            if (choice == 1) { //Choose your sub option.
                getAName();    // Get the user name.
                System.out.println("Your name is " + player1Name); //Saved
            }
            if (choice == 2)
                getsubMenu();
            if (choice == 3)
                System.exit(0);
        }
    
        public void welcomeBanner()
        {
            for (int i = 0; i < 60; i++)
            {
                System.out.print('*');
            }
            System.out.println("");
            System.out.println("*        Welcome To The Rock, Paper, Scissors Game         *");
            System.out.println("*                             *");
            System.out.println("*     Created by: Jonathan Gutierrez, and I am NoxBot!     *");
            for (int i = 0; i < 60; i++)
            {
                System.out.print('*');
            }
            System.out.println("");
            System.out.println("");
        }
    
        public int getMenu ()
        {
            int playermenuChoice;
            System.out.println("1. Enter Player Name");
            System.out.println("2. Play a Game");
            System.out.println("3. Exit Application");
            System.out.println("");
            System.out.print("Enter your choice: ");
            playermenuChoice = Integer.parseInt(keyboard.nextLine().trim());
            return playermenuChoice;
        }
    
        public int getsubMenu ()
        {
            int submenuChoice;
            System.out.println("Enter 1 for Rock");
            System.out.println("Enter 2 for Paper");
            System.out.println("Enter 3 for Scissors");
            System.out.println("");
            System.out.print("Enter choice: ");
            submenuChoice = Integer.parseInt(keyboard.nextLine().trim());
            return submenuChoice;
        }
    
        //This method has been changed to use the class variable, and no longer
        //returns a string.
        public void getAName ()
        {
            //String player1Info;
            System.out.print("Enter your name: ");
            player1Name = keyboard.nextLine ();
            //return player1Info;
        }
    
        public String computerChoice ()
        {
            String cpuChoice;
            cpuChoice = "";
            Random randomNumbers = new Random();
            int cpu = randomNumbers.nextInt (2) + 1;
            switch (cpu)
            {
                case 1:
                cpuChoice = "Rock";
                break;
                case 2:
                cpuChoice = "Paper";
                break;
                case 3:
                cpuChoice = "Scissors";
                break;
            }
            return cpuChoice;
        }
    
        public static void main(String...args)
        {
            new RockPaperScissorsNew();
        }
    }