# lg-practice **Repository Path**: jade_lee/lg-practice ## Basic Information - **Project Name**: lg-practice - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-05 - **Last Updated**: 2021-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #说明 ##Java基础 ### 模块一 #### 1 编程题 提示用户输入年月日信息,判断这一天是这一年中的第几天并打印。 package java_basic.stage1_javase.Chessboard 分为一月、二月、其他月做判断 #### 2 编程题 编程找出 1000 以内的所有完数并打印出来。 所谓完数就是一个数恰好等于它的因子之和,如:6=1+2+3 package java_basic.stage1_javase.PerfectNumber 遍历给定范围的数,满足是因子,就累加 #### 3 编程题 实现双色球抽奖游戏中奖号码的生成,中奖号码由 6 个红球号码和 1 个蓝球号码组成。 其中红球号码要求随机生成 6 个 1~33 之间不重复的随机号码。 其中蓝球号码要求随机生成 1 个 1~16 之间的随机号码。 package java_basic.stage1_javase.DoubleColorBall 关键 某范围的随机数-->自定义方法实现 去重-->HashSet #### 4 编程题 自定义数组扩容规则,当已存储元素数量达到总容量的 80%时,扩容 1.5 倍。 例如,总容量是 10,当输入第 8 个元素时,数组进行扩容,容量从 10 变 15。 package java_basic.stage1_javase.MyList 借鉴了ArrayList 的实现 #### 5 使用二维数组和循环实现五子棋游戏棋盘的绘制 package java_basic.stage1_javase.Chessboard 没啥好说的 ###模块二 ####1 编程实现以下需求: 定义一个长度为[16][16]的整型二维数组并输入所有位置的元素值,分别实现二维数组中所有行和所有列中所有元素的累加和并打印。 再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。 package java_basic.stage1_javase.module2.q1; 思路: 生成16*16 随机数填充的矩阵 遍历矩阵可打印行 矩阵行列反转后打印列(复用打印行的方法) 打印对角没啥可说的,取对索引值就行 ####2 编程实现控制台版并支持两人对战的五子棋游戏。 (1)绘制棋盘 - 写一个成员方法实现 (2)提示黑方和白方分别下棋并重新绘制棋盘 - 写一个成员方法实现。 (3)每当一方下棋后判断是否获胜 - 写一个成员方法实现。 package java_basic.stage1_javase.module2.q2; 关键: 使用二维数组 判断是否有子 即判断此处是否空 判断是否获胜 分四个方向判断 ####3 按照要求设计并实现以下实体类和接口 3.1 第一步:设计和实现以下类 (1)手机卡类 特征:卡类型、卡号、用户名、密码、账户余额、通话时长(分钟)、上网流量 行为:显示(卡号 + 用户名 + 当前余额) (2)通话套餐类 特征:通话时长、短信条数、每月资费 行为: 显示所有套餐信息 (3)上网套餐类 特征:上网流量、每月资费 行为:显示所有套餐信息 (4)用户消费信息类 特征:统计通话时长、统计上网流量、每月消费金额 3.2 第二步:设计和实现以下枚举类 手机卡的类型总共有 3 种:大卡、小卡、微型卡 3.3 第三步:实体类的优化 将通话套餐类和上网套餐类中相同的特征和行为提取出来组成抽象套餐类。 3.4 第四步:创建并实现以下接口 (1)通话服务接口 抽象方法: 参数 1: 通话分钟, 参数 2: 手机卡类对象 让通话套餐类实现通话服务接口。 (2)上网服务接口 抽象方法: 参数 1: 上网流量, 参数 2: 手机卡类对象 让上网套餐类实现上网服务接口。 3.5 第五步:进行代码测试 编写测试类使用多态格式分别调用上述方法,方法体中打印一句话进行功能模拟即可。 ###模块三 ####1 编程题: 编程统计字符串"ABCD123!@#$%ab"中大写字母、小写字母、数字、其它字符的个数并打 印出来。 package java_basic.stage1_javase.module3.q1; string.matches()的应用 ####2 编程题: 编程获取两个指定字符串中的最大相同子串。 如: s1="asdafghjka", s2="aaasdfg" 他们的最大子串为"asd" 提示: 将短的那个串进行长度依次递减的子串与较长的串比较。 package java_basic.stage1_javase.module3.q2; ####3 编程题: 准备一个 HashMap 集合,统计字符串"123,456,789,123,456"中每个数字字符串出现的次数并打印出来。 如: 123 出现了 2 次 456 出现了 2 次 789 出现了 1 次 package java_basic.stage1_javase.module3.q3; 数字字符串作为key,次数作为value放进map中,循环并update value ####4 编程题: 使用 List 集合实现简易的学生信息管理系统,要求打印字符界面提示用户选择相应的功 能,根据用户输入的选择去实现增加、删除、修改、查找以及遍历所有学生信息的功能。 其中学生的信息有:学号、姓名、年龄。 要求: 尽量将功能拆分为多个.java 文件。 package java_basic.stage1_javase.module3.q4; ####5 编程题 使用集合实现斗地主游戏的部分功能,要求如下: (1)首先准备 54 张扑克牌并打乱顺序。 (2)由三个玩家交替摸牌,每人 17 张扑克牌,最后三张留作底牌。 (3)查看三个玩家手中的扑克牌和底牌。 (4)其中玩家手中的扑克牌需要按照大小顺序打印,规则如下: 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3 java_basic.stage1_javase.module3.q5; 准备牌: 完成数字与纸牌的映射关系: 使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。 洗牌: 通过数字完成洗牌发牌 发牌: 将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 存放的过程中要求数字大小与斗地主规则的大小对应。 将代表不同纸牌的数字分配给不同的玩家与底牌。 看牌: 通过Map集合找到对应字符展示。 通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。 ###模块四 ####1 编程题: 基于学生信息管理系统增加以下两个功能: a.自定义学号异常类和年龄异常类,并在该成员变量不合理时产生异常对象并抛出。 b.当系统退出时将 List 集合中所有学生信息写入到文件中,当系统启动时读取文件中所 有学生信息到 List 集合中。 ####2 编程题: 实现将指定目录中的所有内容删除,包含子目录中的内容都要全部删除。 ####3 编程题: 使用线程池将一个目录中的所有内容拷贝到另外一个目录中,包含子目录中的内容。 ####4. 编程题 使用基于 tcp 协议的编程模型实现将 UserMessage 类型对象由客户端发送给服务器; 服 务 器接 收到 对象 后判 断 用户 对象 信息 是否 为 "admin" 和 "123456", 若 是则 将 UserMessage 对象中的类型改为"success", 否则将类型改为"fail"并回发给客户端, 客户 端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。 中 UserMessage 类的特征有:类型(字符串类型) 和 用户对象(User 类型)。 其中 User 类的特征有:用户名、密码(字符串类型)。 如: UserMessage tum = new UserMessage("check", new User("admin", "123456")); ####5 编程题 使用基于 tcp 协议的编程模型实现多人同时在线聊天和传输文件,要求每个客户端将发 送的聊天内容和文件发送到服务器,服务器接收到后转发给当前所有在线的客户端。