A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天我用数组对昨天的代码进行了改进,基本能够实现正确的需求,分享一下<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;      
        }
}
>

1 个回复

正序浏览
厉害啊,没看懂,尴尬
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马