为了教会女儿学习java花了三天的下班时间编写了一个java猜数字游戏,为了让她感兴趣,同时能理解编程的思路,可惜目标没有达成,现在共享给大家学习。

package test;

import java.util.Random;
import java.util.Scanner;

public class GuestNumber {

private static boolean repeat = false;
    private static boolean success = false;
    
    /**
      * @param args
      */
   public static void main(String[] args) {
       System.out.println("猜数字游戏规则:\n  系统将自动生成4个不重复的数字,您有10次机会输入4个从1-9的不重复的数字来猜这4个数字;\n  当您猜中某个数字时,系统显示1个B,猜中2个显示2B,以此类推;\n  当这个数字的位置也正确时,系统显示1个A,两个数字位置正确显示2A,以此类推;\n  当4个数字都猜中时游戏结束!\n  系统已经生成一个4位不重复的数字,现在游戏开始!");
       int d = 1;
       String[] guest = generateRandomArray(4);
       //System.out.println("$$$$$$$$$$$$"+transform(guest));
       while (d != 10) {
           if (success) {
               int f = d -1;
               System.out.println("恭喜您,您共使用"+ f +"次猜中了该数字!");
               break;
           };
           System.out.print("第"+d+"次:请输入1-9内的4个不重复的数字:");
           Scanner sacn = new Scanner(System.in);
           String st = sacn.next();
           if (checkLength(st)) {
               String[] e = checkRepeat(st);
               if (!repeat) {
                   System.out.println("您猜测的结果是:"+than(e, guest));
               };
           }
           d++;
       }
       if (d == 10 && !success) {
           System.out.println("您猜数字已经超过10次!该数字是:" + transform(guest));
       }
    }

private static boolean checkLength(String s) {
       if (s == null || s.equals("")) {
           System.out.print("输入4位数字!\n");
           return false;
       }
       try{
           Integer.parseInt(s);
          }catch(NumberFormatException e) {
              System.out.print("输入4位数字!\n");
              return false;
          }
       if (s.length() < 4) {
           System.out.print("输入的数字小于4位数,请重新输入!\n");
       }
       if (s.length() > 4) {
           System.out.print("输入的数字大于4位数,请重新输入!\n");
       }
       if (s.length() == 4) {
           return true;
       }
       return false;
   }
   
   private static String[] checkRepeat(String s) {
       repeat = false;
       String[] t = new String[4];
       for (int i =0; i < s.length(); i++) {
            t[i] = String.valueOf(s.charAt(i));
       }
       int a = 3;
       while (a != 0) {
           for (int x = 0; x < a; x++) {
               if (t[a].equals(t[x])) {
                   repeat = true;
                   System.out.print("输入的数字中有重复数字,请重新输入!\n");
               }
           }
           a--;
       }
       return t;
   }
   
   public static String than(String[] input, String[] random) {
       int precise = 0;
       int include = 0;
       StringBuffer result = new StringBuffer();
       for (int a = 0; a < input.length; a ++) {
           for (int b = 0; b < random.length; b++) {
               if (a == b && input[a].equals(random[b])) {
                   precise ++;
                   if (precise == 4) {
                       success = true;
                   }   
               }else
               if (input[a].equals(random[b])) {
                   include ++;
               }
           }
       }
           result.append(String.valueOf(precise) + "A");
           result.append(String.valueOf(include) + "B");
       return result.toString();
   }
   
   public static String[] generateRandomArray(int size){
       String[] s = new String[size]; 
       Integer range = 10;
       Random ran = new Random();
       int i = 0;
       while(s[size -1] == null){
           Integer tmp = ran.nextInt(range); 
           if (tmp != 0) {
               int a = i;
               boolean b = false;
               while (a != 0) {
                  if (String.valueOf(tmp).equals(s[a-1])) {
                      b = true;
                  }
                  a--;
               }
               if (!b) {
                   s[i] = String.valueOf(tmp);
                   i ++;
               }
           }
       }
       return s;  
   }
   
   private static String transform(String[] s) {
       StringBuffer sb = new StringBuffer();
       for (int i = 0; i < s.length; i ++) {
           sb.append(s[i]);
       }
       return sb.toString();
   }
}

老程序员教女儿学习java从一个简单的猜数游戏开始相关推荐

  1. 10开发Python老程序员教你学习Python的的几大秘诀

    Python 是一门优雅而又不失实用的语言,它语法简单很容易学会,又具有极高的可读性和灵活性.在知乎上 Python 是受关注最多的编程语言.很遗憾在我初学的时候没有知乎这样的平台提供这么多的资源,甚 ...

  2. 老程序员吐槽,今天面试了一个被培训班坑了的学生

    随着互联网热别是移动互联网的兴起,市场上对程序员的需求越来越大,程序员的工资相比其它行业也高,所以很多培训机构瞄准了这个市场,这也引起了市场上培训机构良莠不齐,某公司资深程序员面试完一个培训班出来的学 ...

  3. 程序员成长之旅——Delphi实现一个简单的科学计算器

    程序员成长之旅--Delphi实现一个简单的科学计算器 目标效果 组件以及开发环境 最终呈现 源码GITHUB 目标效果 组件以及开发环境 delphi7版本及以上,这里我用delphi10.4进行的 ...

  4. 用Java写一个简单的回合制游戏

    用Java写一个简单的回合制游戏 创建基本属性,血量,名字,技能,技能伤害. 如下: public class One3 {//创建三个属性private String name;private St ...

  5. 【转】一个40岁老程序员的前端学习之路|2021 年中总结

    40岁的老程序员感言 时光给我留下了什么? 不知不觉间虚度了40年光阴,看着父母逐渐的苍老和孩子逐渐长大,看着自己发福的身材,已知道自己在这个陌生的城市里已经扎根,估计是很难再去哪里了.回首故里似乎和 ...

  6. 送书 | 一位60后老程序员从零学习Python的感悟

    AI时代,Python因其语法流畅.上手简单.生态强大,被越来越多的企业和个人所青睐,成为大数据.人工智能的首选编程语言,由于Python的扩展性强大,在其他几乎所有领域,甚至办公.小游戏等,都可以迅 ...

  7. 一个40岁老程序员的前端学习之路|2021 年中总结

    40岁的老程序员感言 时光给我留下了什么? 不知不觉间虚度了40年光阴,看着父母逐渐的苍老和孩子逐渐长大,看着自己发福的身材,已知道自己在这个陌生的城市里已经扎根,估计是很难再去哪里了.回首故里似乎和 ...

  8. 无聊的时候怎么办?教你用java写一个简单挂机打金币小游戏吧!

    无聊的时候怎么办?教你用java写一个超简单挂机打金币小游戏吧! Java写一个挂机打金币程序 1.Java的面向对象 2.基础打金的分析 3. Robot介绍以及Demo演示 4.挂机打金程序如何去 ...

  9. 现在企业编程用java还是python_想转行做程序员,是学习 Java 还是 Python 更好?

    只有小孩子才做选择,我都要 我们学习的目的是为了更好的就业,那当然Java就是首先,然后在学Python 下面给你谈谈我为什么建议你先学Java JAVA的市场占有率相当高,因其广泛的应用型和不易出错 ...

最新文章

  1. 博客阅读学习笔记-目录
  2. Matlab中pickic_法语「野餐」怎么写?不是picnic哦
  3. 第18天学习Java的笔记-ArrayList
  4. pb 执行存储过程带参数_数据库存储过程
  5. 淘宝+天猫+闲鱼卖的翻新货店家汇总(持续更新)
  6. Qt网络程序:基于TCP的服务器、客户端实例
  7. element文件上传有文件但是后台接收为空_程序员提高篇:大规格文件(G)是如何做分片优化的?...
  8. DAL调用SP时出现的异常处理
  9. nginx+uwsgi部署Django
  10. 磁卡门锁怎么配卡_样式多的铜工艺品怎么设计请查看_江西南昌皇巢|铜门||别墅铜门|...
  11. Oralce定时任务实际应用
  12. JavaScript 学习笔记— —Arguments
  13. Linux 运维工程师学习成长路线上要经历哪四个阶段?
  14. LINUX下载并编译sqlite
  15. 《程序员代码面试指南》第三章 二叉树问题 判断t1树是否包含t2树全部的拓扑结构...
  16. lighttp 配置php扩展包,Lighttpd配置
  17. 怎么用matlab进行频域分析法,如何用Matlab进行频域分析?
  18. zkeacms mysql_在Docker中运行纸壳CMS并配置使用MySql
  19. 【算法】整数拆分问题
  20. PowerCHM-强大的CHM工具

热门文章

  1. Kali Linux系统安装Fluxion
  2. html 气泡提示框,如何用纯 CSS 实现气泡对话框
  3. uniapp之sqllite使用
  4. 如果互联网公司是一所大学,你Pick哪家?
  5. CentOS命令行界面与图形界面切换
  6. Kitti数据集的使用
  7. Responder object
  8. 2010年安徽省计算机二级证书,2010安徽省计算机等级考试二级考资料
  9. 计算机考北京科技大学容易吗,北京科技大学考研难吗?一般要什么水平才可以进入?...
  10. 【Matting】MODNet:实时人像抠图模型-笔记