今天我用数组对昨天的代码进行了改进,基本能够实现正确的需求,分享一下<import java.util.Scanner;
import java.util.Random;
public class CaiShuZi_2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//初始化游戏 游戏说明
System.out.println("---------------------猜数字-----------------------");
System.out.println();
System.out.println(" 游戏说明 ");
System.out.println();
System.out.println("游戏时会随机产生四个0-9之间的数字,依次输入四个数(数字可以重复)");
System.out.println("如果位置和数字都正确,相应位置显示R");
System.out.println("如果数字存在但位置错误,相应位置显示O");
System.out.println("如果数字不存在,相应位置显示X");
System.out.println("过关条件:在8次之内能猜出正确的数字");
System.out.println();
System.out.println();
boolean fg=false; //用于判断闯关是否成功
String rt=""; //用来存储随机产生的四个数
while(true) {
System.out.println("1.开始游戏");
System.out.println("2.退出游戏");
System.out.println();
System.out.println("请输入您的选择");
int xh=sc.nextInt();
if(xh==2){break;}
else {
//进行游戏
int[] arr_random=new int[4]; //记录生成的随机数
rt=init(arr_random); //获取生成的随机数
for(int i=1;i<9;i++) {
String rl=getInfo(arr_random,i); //游戏结果
String rl0="RRRR";
int bt=rl.compareTo(rl0);
if(bt==0) {
fg=true;
break;
}
else
System.out.println(rl);
}
}
if(fg) {
System.out.println("------------恭喜你过关了----------------");
System.out.println();
System.out.println();
System.out.println("退出游戏请输入0,继续游戏请输入其他数字键");
int dh=sc.nextInt();
if(dh==0){break;}
}
else {
System.out.println("--------------很遗憾,您输了--------------------------");
System.out.println();
System.out.println("正确答案是:\t"+rt);
System.out.println();
System.out.println();
System.out.println("退出游戏请输入0,继续游戏请输入其他数字键");
int dh=sc.nextInt();
if(dh==0){break;}
}
}
}
//加载游戏 返回产生的随机数
public static String init(int[] arr) {
//随机产生四个数
Random rd=new Random();
for(int i=0;i<4;i++) {
arr[i]=rd.nextInt(10);
}
System.out.println("游戏初始化完成!");
String rt="";
for(int i=0;i<4;i++){
rt+=arr[i];
}
return rt;
}
//判断游戏结果
public static String getInfo(int[] arr,int k) {
Scanner sc=new Scanner(System.in);
System.out.println();
int[] arr_scanner=new int[4];
System.out.println("请输入四个数字,进行第"+k+"次尝试");
int num=sc.nextInt();
//声明四个变量,用于接收用户输入的四个数字
int n1,n2,n3,n4; //分别代表千位,百位,十位 ,个位
arr_scanner[0]=num/1000;
arr_scanner[1]=num%1000/100;
arr_scanner[2]=num%100/10;
arr_scanner[3]=num%10;
String result=""; //用于存储判断结果
//判断各个数位的结果
char[] arr_result=new char[4];
//找出数字和位置都正确的
for (int i=0;i<4;i++) {
if(arr[i]==arr_scanner[i]) { //数字和位置都正确
arr[i]+=10;
arr_scanner[i]=10;
arr_result[i]='R';
}
}
a:for(int i=0;i<4;i++) {
//如果结果中已经有值,就进行下次循环
if(arr_scanner[i]>9) {
continue;
}
//找数字正确,但位置不正确
for(int j=0;j<4;j++) {
if(i==j) { //位置相同的情况排除
continue;
}else {
if(arr_scanner[i]==arr[j]) { //数字正确,但位置不正确
arr_result[i]='O';
continue a;
}
}
}
arr_result[i]='X'; //剩余的情况就是数字不存在的
}
//恢复目标数组(随机产生的数组),以免影响下次判断
for(int i=0;i<4;i++){
if(arr[i]>9)
arr[i]-=10;
}
//构造判定结果字符串
for(char c:arr_result){
result+=c;
}
return result;
}
}
>
|
|