原题:
Write a program that plays the popular scissor-rock-papergame(A scissor can cut a paper.a rock can knock a scissor,and a paper can wrapa rock ).The program randomly generates a number 0,1 or 2 representingscissor,rock,and paper.The program prompts the user to enter a number 0,1 or 2and displays a message indicating whether the user or the computerwins,loses,or draws.Revise the program to let user continuously play untileither the user or the computer wins more than two times.
题目来源:
题目选自《JAVA程序语言设计》 P108-3.17*+ P153-4.34***
解题思路:
建立一个循环,循环内首先通过Math.random()*生成一个0~2的随机数赋值给computer(即计算机),从输入端输入一个0-2的数字(输出不符合规则则重新输入)赋值给user(即玩家),通过switch语句数字对应输出计算机和用户所要出的手势,随后用if-else语句进行比较判断,如果user赢则提示user获胜且玩家获胜数num1加一,computer赢则提示computer获胜且计算机获胜数num2加一,平局则提示平局,当有一方赢了两场询问时否继续游戏,是则重新开始;否则跳出循环,输出游戏结束,最后通过三目运算符判断并输出谁是赢家。
代码如下:
import java.util.*;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
int num1=0,num2=0;
while (true)
{
int computer= (int) (Math.random()*3); //产生一个0~2的随机数并赋给计算机
Scanner input=new Scanner(System.in);
System.out.print("scissor (0), rock (1), paper (2):");
int user=input.nextInt(); //用户端输入
if (user> 2 || user < 0) //如果用户输入数不在0~2间,则会要求重新输入本次数据
continue;
System.out.print("The Computer is ");
switch(computer) //识别计算机的数并对应输出scissor、rock或者paper
{
case 0:
System.out.print("scissor. ");break;
case 1:
System.out.print("rock.");break;
case 2:
System.out.print("paper.");break;
}
switch(user) //识别用户输入的数并对应输出scissor、rock或者paper
{
case 0:
System.out.print(" You are scissor.");break;
case 1:
System.out.print(" You are rock. ");break;
case 2:
System.out.print(" You are paper. ");break;
}
//比较computer和user的数据.
if (computer == user) //平局
System.out.println("too. It is a draw");
else if (user== ++ computer ||(computer == 2 && user ==0)) //user比computer大1或者computer为2时user为0
{
System.out.println("You won");
num2++;
}
else
{
System.out.println("computer won");
num1++;
}
if ((num1>=2)||(num2>=2)) //如果计算机或者用户赢了两局,则跳出
{
System.out.print("Do you want to continue?(Enter Y to continue,EnterN to exit):"); //询问是否要继续,输入Y继续,输入N退出
StringChoose = input.next();
if (Choose.equals("Y")) //输入Y,计数器清零重新开始
{
num1=0;
num2=0;
continue;
}
else if (Choose.equals("N")) //输入N,退出游戏
{
break;
}
}
}
System.out.println("Game over"); //输入游戏结束
System.out.println((num1>num2)?"computer win":"you win"); //输出赢家
}
}
运行结果:
/*output:
scissor (0), rock (1), paper(2):2
The Computer is rock. You arepaper. You won
scissor (0), rock (1), paper(2):1
The Computer is scissor. You are rock. You won
Do you want tocontinue?(Enter Y to continue,Enter N to exit):Y
scissor (0), rock (1), paper(2):1
The Computer is rock. You arerock. too. It is a draw
scissor (0), rock (1), paper(2):2
The Computer is scissor. You are paper. computer won
scissor (0), rock (1), paper(2):1
The Computer is rock. You arepaper. You won
scissor (0), rock (1), paper(2):1
The Computer is scissor. You are rock. You won
Do you want tocontinue?(Enter Y to continue,Enter N to exit):N
Game over
you win
*///~