java - 需要将整个事情放在一个循环中,哪个循环最适合?我应该在哪里应用它?

标签 java loops random

我的 Java 项目即将完成。目标是与用户和计算机一起玩剪刀石头布游戏。计算机生成一个随机数,该数字必须与三个选择之一相关。我已经到了可以成功玩的地步,但这里有一个问题,如果平局,游戏就要重复并重新开始,否则就终止。我把它带到了它终止的地方,但不知道如何让它在平局的情况下重复整个过程。这些方法必须保持原样,但我的教授说答案是整个事情是否处于循环状态。我的问题是我应该使用哪个循环以及它应该放置在哪里?这是代码:

public class FahrDylanRockPaperScissors{
public static void main (String [] args){
    String computer = computerChoice();
    String user = userChoice();
    determineWinner(computer, user);

}
public static String computerChoice( ){
    Random rand = new Random();
     int cinput = rand.nextInt(3)+ 1;
     String computer = "thing";
    if (cinput == 1)
    computer = "Rock";
    if (cinput == 2)
    computer = "Paper";
    if (cinput == 3)
    computer = "Scissors";
    return computer;
}
public static String userChoice(){
    Scanner sc = new Scanner (System.in);
    String user = "default";
    do{
        System.out.println ("Let's Play a game! Rock, Paper, Scissors!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " + "\nPlease enter either Rock, Paper, or Scissors: " + "\nGood Luck!");
        user = sc.nextLine();
    }

    while (isValidChoice (user) == false);
    return user;
}
public static boolean isValidChoice(String choice){
    boolean status;
    if (choice.compareTo("Rock")== 0)
        status = true;
    else if (choice.compareTo("Paper")== 0)
        status = true;
    else if (choice.compareTo("Scissors")== 0)
        status = true;

    else{
        status = false;
        System.out.println("Error! Make sure you are capitalizing your choices");
    }

    return status;
}
public static void determineWinner(String computer, String user){
    System.out.println (" Computer Choice: " + computer);
    System.out.println ("Your Choice : " + user);
    if (computer.compareTo( "Rock" ) == 0 && user.compareTo  ("Scissors") == 0)
    System.out.println (" Computer wins! Better luck next time!");
    if (computer.compareTo("Scissors")== 0 && user.compareTo("Paper") == 0)
    System.out.println (" Computer wins! Better luck next time!");
    if (computer.compareTo("Paper") == 0 && user.compareTo("Rock") == 0)
    System.out.println (" Computer wins! Better luck next time!");
    if (computer.compareTo("Rock") == 0 && user.compareTo("Paper") == 0)
    System.out.println (" You win!!");
    if (computer.compareTo("Scissors") == 0 && user.compareTo("Rock") == 0)
    System.out.println (" You win!!");
    if (computer.compareTo("Paper") == 0 && user.compareTo("Scissors") == 0)
    System.out.println (" You win!!");
    else if (computer.compareTo(user) == 0 )
    System.out.println(" Tie! the game must be played again.");
}

}

最佳答案

您可以使用 do-while循环,因为您的代码至少需要执行一次。

public static void main (String [] args){
    boolean win = false;
    do{
        String computer = computerChoice();
        String user = userChoice();
        win = determineWinner(computer, user);
    }while(!win);
}

第一次执行整个代码。然后检查谓词,如果有人赢了,do-while会停止。但如果win等于 false它将再次执行。

您只需 while 即可实现相同的效果循环,或其他循环。但是因为你的代码需要至少运行一次do-while很适合。

编辑:

您需要更改代码,以便 determineWinner如果有人获胜 ( return true ) 或平局 ( return false ),则返回。我在发布答案时没有看到它目前没有返回类型。

获取 determineWinner 的简单方法工作方法如下。

public static boolean determineWinner(String computer, String user){
    System.out.println (" Computer Choice: " + computer);
    System.out.println ("Your Choice : " + user);
    if (computer.compareTo( "Rock" ) == 0 && user.compareTo  ("Scissors") == 0)
    System.out.println (" Computer wins! Better luck next time!");
    if (computer.compareTo("Scissors")== 0 && user.compareTo("Paper") == 0)
    System.out.println (" Computer wins! Better luck next time!");
    if (computer.compareTo("Paper") == 0 && user.compareTo("Rock") == 0)
    System.out.println (" Computer wins! Better luck next time!");
    if (computer.compareTo("Rock") == 0 && user.compareTo("Paper") == 0)
    System.out.println (" You win!!");
    if (computer.compareTo("Scissors") == 0 && user.compareTo("Rock") == 0)
    System.out.println (" You win!!");
    if (computer.compareTo("Paper") == 0 && user.compareTo("Scissors") == 0)
    System.out.println (" You win!!");
    else if (computer.compareTo(user) == 0 ){
        System.out.println(" Tie! the game must be played again.");
        return false;
    }
    return true;
}

以及您的编码风格:

使用括号 {} 是一个很好的习惯对于 if/else/for...即使您只有一条语句,因为它提高了代码的可读性。

编辑2:

因为您无法更改某些内容,所以最简单的方法可能如下:

public static void main(String[] args){
     boolean tie = true;
        do{
            String computer = computerChoice();
            String user = userChoice();
            tie = (computer.compareTo(user) == 0);
            determineWinner(computer, user);
        }while(tie);
}

即使determineWinner确定获胜者,您需要它为您提供反馈。如果您无法获得反馈,只需确定您的 main 中是否存在平局。 -方法,如果你得到平局,请重复。

关于java - 需要将整个事情放在一个循环中,哪个循环最适合?我应该在哪里应用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29235807/

相关文章:

python - 阈值图像数组和渲染的有效方法 - Python/NumPy/OpenCV

windows - 随机化批处理文件中的文本颜色和背景颜色

mysql - SQL:如何随机选择并按最高排序

java - 返回三角形类型,无法识别标识符

java - 将 KeyListener 添加到 JPanel 不起作用

java - session 范围 Bean 不是 session 范围 Bean

C# 随机选择单词不起作用

java - 退回这个有什么问题?

node.js - 是什么阻止 Node.js 异步

c - C中的for循环只返回数组的第一个值