首页 文章

岩纸剪刀蜥蜴Spock

提问于
浏览
-3

我需要打印一个程序中用户获胜,失败和关系的数量 . 我花了很长时间来解决循环问题,但我终于明白了 . 我是Java新手,但以前用HTML和其他脚本语言编写代码 .

import java.io.InputStream;
import java.util.Random;
import java.util.Scanner;

public class RPSLS {

//AUTHOR: JOSEPH CLAY


//TODO make program continue until user chooses to stop.
//TODO then print # of user wins, losses, and ties. 


public static void main(String[] args) {

//declare objects   
String user;    
String comp= "";
Random comprand;
String answer=null;


do
{



//scanner and random setup and imported
    Scanner scan=new Scanner(System.in);
    //Random gen=new Random();



//prompt to play game/instructions  
    System.out.println("Yo, let's play a game of Rock, Paper, Scissors, Lizard, Spock");
    System.out.println("Please enter R for rock, P for paper, S for scissors, L for lizard, or V for Spock");



//User selection input
    System.out.println("Pick your poison: "); 
 user=scan.next();

//Randomly generated # of 5
System.out.println();
comprand=new Random();
int x=comprand.nextInt(5)+1;



//translate random # to string 
if(x==1)
    comp="R";
else if(x==2)   
    comp="P";
else if(x==3)   
    comp="S";
else if(x==4)
    comp="L";
else if(x==5)   
    comp="V";



//capitalize user selection
user=user.toUpperCase();



//print computer choice
System.out.println("Your adversary chose: "+comp);



//conditions of possible outcomes




//tie
if (user.equals(comp))
    System.out.println("Tie!");


//if user enters r
    else if (user.equalsIgnoreCase("R"))
        if (comp.equals("S"))
            System.out.println("Rock crushes scissors. You win!");
    else if (comp.equals("P"))
        System.out.println("Paper envelopes rock. You lose.");
    else if (comp.equals("L"))
        System.out.println("Rock destroys lizard. You win!");
    else if (comp.equals("V"))
        System.out.println("Spock crushes rock. You lose.");

//if user enters p
    if (user.equalsIgnoreCase("P"))
         if (comp.equals("R"))
             System.out.println("Paper envelopes rock. You win!");
    else if (comp.equals("S"))
        System.out.println("Scissors cuts paper. You lose");
    else if (comp.equals("L"))
        System.out.println("Lizard eats paper. You lose.");
    else if (comp.equals("V"))
        System.out.println("Paper disproves Spock. You win!");

//if user enters s
if (user.equalsIgnoreCase("S"))
     if (comp.equals("R"))
         System.out.println("Rock crushes scissors. You lose.");
else if (comp.equals("P"))
    System.out.println("Scissors cuts paper. You win!");
else if (comp.equals("L"))
    System.out.println("Scissors eviscerates lizard. You win!");
else if (comp.equals("V"))
    System.out.println("Spock vaporizes scissors. You lose.");

//if user enters l
if (user.equalsIgnoreCase("L"))
     if (comp.equals("R"))  
         System.out.println("Rock crushes lizard. You lose.");
else if (comp.equals("P"))
    System.out.println("Lizard eats paper. You win!");
else if (comp.equals("S"))
    System.out.println("Scissors eviscerate lizard. You lose.");
else if (comp.equals("V"))
    System.out.println("Lizard poisons Spock. You win!");

//if user enters v
if (user.equalsIgnoreCase("V"))
     if (comp.equals("R"))
         System.out.println("Spock crushes rock. You win!");
else if (comp.equals("P"))
    System.out.println("Paper disproves Spock. You lose!");
else if (comp.equals("S"))
    System.out.println("Spock vaporizes scissors. You win!");
else if (comp.equals("L"))
    System.out.println("Lizard poisons Spock. You lose.");




System.out.println("Would you like to continue? (yes or no)");
answer = scan.next();
}

while(answer.equals("y"));

while (answer.equalsIgnoreCase("n"))
    break;


}       

}

1 回答

  • 0

    根据您对问题的评论,以下是如何实现跟踪用户拥有的胜利,损失和关系的数量 .

    在开始 do 循环之前,声明变量以跟踪每个变量 . 既然你想要计算它们,我会为每个建议一个简单的整数变量:

    int wins = 0;
    int losses = 0;
    int ties = 0;
    

    然后在循环内部,当出现这种情况时,递增每个计数器 . 例如:

    if (comp.equals("R")){
             System.out.println("Spock crushes rock. You win!");
             wins++;
         }
         else if (comp.equals("P")){
             System.out.println("Paper disproves Spock. You lose!");
             losses++;
         }
    

    循环结束后,即在 while 之后,然后打印这些数字 .

    while(answer.equals("y"));
    System.out.println("You won "+wins+" times");
    System.out.println("You lost "+losses+" times");
    System.out.println("You tied "+ties+" times");
    

    最后,一些代码审查项目为您 . 你通常不想写这样的代码:

    while(answer.equals("y"));

    原因是如果 answer 为null,则会在运行时抛出 NullPointerException . 写起来更安全:

    while("y".equals(answer));

    在上面的代码中,“y”永远不能为null,因此您永远不会有此代码抛出的NullPointerException .

    其次,对所有可能的场景进行硬编码并不是编写程序的最有效和可维护的方法 . 相反,如果您根据对象进行思考(并且您应该因为Java是面向对象的语言),您可以创建一个对象来表示每个可能的选择,并且每个对象可以包含其他类型的对象,表示哪些选择将使其失败 . 然后你可以简单地做这样的事情:

    if(userChoice.defeats(computerChoice)){
        //handle user win here
    }else if(computerChoice.defeats(userChoice){
       //handle computer win here
    }else{
       //handle tie here
    }
    

    希望这对你有所帮助!

相关问题