作业1
编程统计字符串”ABCD123!@#$%ab”中大写字母、小写字母、数字、其它字符的个数并打印出来。
- 思路:
(1) String类型转char[] 数组 toCharArray
方法
(2) 判断字符类型的相关方法
使用Character包装类类的静态方法判断
(3)foreach结构
其他:charAt()方法等
foreach循环结构等
package com.lagou.com.lagou.part3homework;
import java.util.Arrays;
/**
* @author 西风月
* @date 2020/8/2
* @description
* 编程统计字符串"ABCD123!@#$%ab"中大写字母、小写字母、数字、其它字符的个数并打印出来。
*/
public class CountChar {
public static void main(String[] args) {
String str1 = "ABCD123!@#$%ab";
int[] result = new int[4];
for (char ch: str1.toCharArray()) {
if(Character.isLowerCase(ch)) result[0]++; //'a' - 'z'
else if(Character.isUpperCase(ch)) result[1]++; //'A' - 'Z'
else if(Character.isDigit(ch)) result[2]++; //'0'-'9'
else result[3]++;
}
System.out.println(Arrays.toString(result));
}
}
- 程序运行截图:
作业2
编程题 编程获取两个指定字符串中的最大相同子串。 如: s1=”asdafghjka”, s2=”aaasdfg” 他们的最大子串为”asd”
提示: > 将短的那个串进行长度依次递减的子串与较长的串比较。
- 思路:
暴力遍历的方法
通过两个循环分别控制循环次数及子串下标,
获取较短字符串的子串,
当发现该子串在较长子串存在 使用contains方法
,则跳出循环
package com.lagou.com.lagou.part3homework;
/**
* @author 西风月
* @date 2020/8/2
* @description
* 编程获取两个指定字符串中的最大相同子串。
* 如: s1="asdafghjka", s2="aaasdfg" 他们的最大子串为"asd"
* 提示: 将短的那个串进行长度依次递减的子串与较长的串比较。
*/
public class GetLongestSubString {
public static void main(String[] args) {
String str1 = "asdafghjka";
String str2 = "aasdfg";
String maxSubString = getLongestSubString(str1, str2);
System.out.println(maxSubString);
}
private static String getLongestSubString(String str1, String str2) {
//1. 检查字符串是否相等或为空字符串
if(str1 == str2) return str1;
if(str1 == null || str2 == null || str1.length() == 0 || str2.length() == 0) return "";
//2. 找出较短串
String longStr = str1.length() >= str2.length() ? str1 : str2;
String shortStr = (longStr == str1) ? str2 : str1;
//3. 由长到短遍历短串
for(int i = 0; i < shortStr.length(); i++) {
for(int j = 0, k = shortStr.length() - i; k < shortStr.length() + 1; j++, k++) {
String rst = shortStr.substring(j, k);
if(longStr.contains(rst)) return rst;
}
}
return "";
}
}
- 程序输出结果: ```bash “C:\Program Files\Java\jdk-11.0.2\bin\java.exe” “-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=2107:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin” -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\javase\out\production\javase com.lagou.com.lagou.part3homework.GetLongestSubString asd
Process finished with exit code 0
<a name="GXt3K"></a>
# 作业3
**编程题 **<br />
> 准备一个 HashMap 集合,统计字符串"123,456,789,123,456"中每个数字字符串出现的次数并打印出来。
> 如: > 123 出现了 2 次
> 456 出现了 2 次
> 789 出现了 1 次
- 思路:
- (1) split方法返回String数组
- (2) 使用HashMap集合记录 K-字符串 V-出现的次数
- (3) foreach
- (4)put方法
- **彩蛋:**merge()
- **public **[**V**](HashMap.html)** merge(**[**K**](HashMap.html)** key, **[**V**](HashMap.html)** value, **[**BiFunction**](function/BiFunction.html)**<? super **[**V**](HashMap.html)**,? super **[**V**](HashMap.html)**,? extends **[**V**](HashMap.html)**> remappingFunction)**
代码中18 、19行可以改成` rst.merge(str, 1, Interger.sum )`
```java
package com.lagou.com.lagou.part3homework;
import java.util.HashMap;
import java.util.Map;
/**
* @author 西风月
* @date 2020/8/2
* @description
*/
public class HashMapCountString {
public static void main(String[] args) {
String str1 = "123,456,789,123,456";
Map<String, Integer> rst = new HashMap<>();
for(String str : str1.split(",")) {
Integer integer = rst.get(str);
rst.put(str, (integer == null ? 0 : integer) + 1);
}
System.out.println(rst);
}
}
- 输出结果: ```bash “C:\Program Files\Java\jdk-11.0.2\bin\java.exe” “-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=2157:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin” -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\javase\out\production\javase com.lagou.com.lagou.part3homework.HashMapCountString {123=2, 456=2, 789=1}
Process finished with exit code 0
<a name="B9xNM"></a>
# 作业4
编程题
>
> 使用 List 集合实现简易的学生信息管理系统,要求打印字符界面提示用户选择相应的功 能,根据用户输入的选择去实现增加、删除、修改、查找以及遍历所有学生信息的功能。
> 其中学生的信息有:学号、姓名、年龄。 要求: 尽量将功能拆分为多个.java 文件。
![image.png](https://cdn.nlark.com/yuque/0/2020/png/1567843/1596437905173-f868a06b-8a15-4965-b57d-89cc43039172.png#align=left&display=inline&height=282&margin=%5Bobject%20Object%5D&name=image.png&originHeight=563&originWidth=1760&size=72638&status=done&style=none&width=880)
```java
package com.lagou.com.lagou.part3homework.SInfoManage;
import java.util.Objects;
/**
* @author 西风月
* @date 2020/8/2
* @description
*/
public class StudentNode {
int stuNo;
String stuName;
int stuAge;
@Override
public String toString() {
return "StudentNode{" +
"stuNo=" + stuNo +
", stuName='" + stuName + '\'' +
", stuAge=" + stuAge +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
StudentNode that = (StudentNode) o;
return stuNo == that.stuNo;
}
@Override
public int hashCode() {
return Objects.hash(stuNo);
}
public StudentNode(int stuNo, String stuName, int stuAge) {
this.stuNo = stuNo;
this.stuName = stuName;
this.stuAge = stuAge;
}
public StudentNode() {
}
public int getStuNo() {
return stuNo;
}
public void setStuNo(int stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
}
package com.lagou.com.lagou.part3homework.SInfoManage;
import java.awt.*;
import java.util.Scanner;
/**
* @author 西风月
* @date 2020/8/2
* @description
*/
public class InputMenu {
public static void main(String[] args) {
StudentsData dat = StudentsData.getInstance();
Scanner sc = new Scanner(System.in);
String ch;
int index;
while(!(ch = menu()).equalsIgnoreCase("EXIT")) {
switch (ch) {
case "1":
System.out.print("请依次输入学号, 姓名, 年龄:");
dat.addElement(new StudentNode(sc.nextInt(), sc.next(), sc.nextInt()));
break;
case "2":
System.out.println("请输入需修改信息学生的学号:");
index = dat.findElementIndex(sc.nextInt());
if(index == -1){
System.out.println("无此学号信息!");
}
else {
System.out.println("请依次输入新的学号, 姓名, 年龄");
dat.setElement(index, new StudentNode(sc.nextInt(), sc.next(), sc.nextInt()));
}
break;
case "3":
System.out.println("请输入需要删除的学生的学号:");
dat.removeElement(sc.nextInt());
break;
case "4":
System.out.println("请输入需查找的学号信息:");
StudentNode node = dat.findElement(sc.nextInt());
if(node == null) {
System.out.println("无此学号信息!");
} else {
System.out.println(node);
}
break;
case "5":
dat.traverse();
break;
default:
System.out.println("输入错误,请重新选择选项!");
}
}
}
private static String menu() {
System.out.println("***********************************************");
System.out.println("****************学生信息管理系统****************");
System.out.println(" 操作选项 说明");
System.out.println("-------------- -----------");
System.out.println(" 1 新增学生信息");
System.out.println(" 2 修改学生信息");
System.out.println(" 3 删除学生信息");
System.out.println(" 4 查找学生信息");
System.out.println(" 5 遍历学生信息");
System.out.println(" EXIT 退出");
System.out.println("***********************************************");
Scanner sc = new Scanner(System.in);
return sc.next().trim();
}
}
package com.lagou.com.lagou.part3homework.SInfoManage;
import java.util.ArrayList;
/**
* @author 西风月
* @date 2020/8/2
* @description
* 实现 存储学生节点
* 提供现增加、删除、修改、查找以及遍历所有学生信息的功能
*/
public class StudentsData {
private ArrayList<StudentNode> head;
private static StudentsData instance = new StudentsData();
private StudentsData() {
head = new ArrayList<StudentNode>();
}
public static StudentsData getInstance() {
return instance;
}
//增加元素
public boolean addElement(StudentNode node) {
StudentNode find = findElement(node.stuNo);
if(find != null) {
System.out.println("已存在相同学号记录!");
System.out.println(find);
return false;
}
return head.add(node);
}
//查找元素
public StudentNode findElement(int studentNo) {
for(StudentNode node : head) {
if(studentNo == node.stuNo) return node;
}
return null;
}
//返回元素index位置
public int findElementIndex(int studentNo) {
return head.indexOf(new StudentNode(studentNo,"",99));
}
//修改元素
public StudentNode setElement(int index, StudentNode node) {
return head.set(index, node);
}
//遍历集合
public void traverse() {
for(StudentNode node : head) {
System.out.println(node);
}
}
//删除元素 根据传入的学号删除元素
public boolean removeElement(int studentNo) {
StudentNode node = findElement(studentNo);
if(null == node) {
System.out.println("无此学号, 删除失败!");
return false;
}
return head.remove(node);
}
}
- 输出结果:
"C:\Program Files\Java\jdk-11.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=3523:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\javase\out\production\javase com.lagou.com.lagou.part3homework.SInfoManage.InputMenu
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
1
请依次输入学号, 姓名, 年龄:1001 AAA 23
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
1
请依次输入学号, 姓名, 年龄:1002 BBB 25
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
1
请依次输入学号, 姓名, 年龄:1003 CCC 28
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
5
StudentNode{stuNo=1001, stuName='AAA', stuAge=23}
StudentNode{stuNo=1002, stuName='BBB', stuAge=25}
StudentNode{stuNo=1003, stuName='CCC', stuAge=28}
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
1
请依次输入学号, 姓名, 年龄:1001 AAA 1
已存在相同学号记录!
StudentNode{stuNo=1001, stuName='AAA', stuAge=23}
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
5
StudentNode{stuNo=1001, stuName='AAA', stuAge=23}
StudentNode{stuNo=1002, stuName='BBB', stuAge=25}
StudentNode{stuNo=1003, stuName='CCC', stuAge=28}
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
4
请输入需查找的学号信息:
1002
StudentNode{stuNo=1002, stuName='BBB', stuAge=25}
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
2
请输入需修改信息学生的学号:
1003
请依次输入新的学号, 姓名, 年龄
1003 FFF 27
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
5
StudentNode{stuNo=1001, stuName='AAA', stuAge=23}
StudentNode{stuNo=1002, stuName='BBB', stuAge=25}
StudentNode{stuNo=1003, stuName='FFF', stuAge=27}
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
3
请输入需要删除的学生的学号:
1002
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
5
StudentNode{stuNo=1001, stuName='AAA', stuAge=23}
StudentNode{stuNo=1003, stuName='FFF', stuAge=27}
***********************************************
****************学生信息管理系统****************
操作选项 说明
-------------- -----------
1 新增学生信息
2 修改学生信息
3 删除学生信息
4 查找学生信息
5 遍历学生信息
EXIT 退出
***********************************************
EXIT
Process finished with exit code 0
作业5
编程题 使用集合实现斗地主游戏的部分功能,要求如下: (1)首先准备 54 张扑克牌并打乱顺序。 (2)由三个玩家交替摸牌,每人 17 张扑克牌,最后三张留作底牌。 (3)查看三个玩家手中的扑克牌和底牌。 (4)其中玩家手中的扑克牌需要按照大小顺序打印,规则如下: 手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
- ① 首先要定义两个Enum类分别表示花色
(CardColorEnum)
牌面(CardNumberEnum)
牌面需保证枚举值按牌面大小排列 - ② 定义单张牌类
OneCard
, 其中包含三个元素:花色、牌面、权重 按[大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3]。 - ③ 定义
斗地主类 ``PlayCard
, 其中包含OneCard类型的LinkedList集合对象card - 说明: 在playCard类中对card集合进行初始化, 并根据OneCard.value权重调用Collections.sort 进行排序
- 打乱牌型: _Collections._shuffle(card);
- 声明比较器:
Comparator
- 排序: Collections.sort(lC, comparator);
package com.lagou.com.lagou.part3homework.Card;
/**
* @author 西风月
* @date 2020/8/3
* @description
*/
public enum CardColorEnum {
COLOR1("♥"),
COLOR2("♠"),
COLOR3("♣"),
COLOR4("♦");
private final String cardColorEnum;
CardColorEnum(String cardColorEnum) {
this.cardColorEnum = cardColorEnum;
}
@Override
public String toString() {
return cardColorEnum;
}
}
package com.lagou.com.lagou.part3homework.Card;
/**
* @author 西风月
* @date 2020/8/3
* @description
*/
public enum CardNumberEnum {
CARD_DW("大王"),
CARD_XW("小王"),
CARD_2("2"),
CARD_A("A"),
CARD_K("K"),
CARD_Q("Q"),
CARD_J("J"),
CARD_10("10"),
CARD_9("9"),
CARD_8("8"),
CARD_7("7"),
CARD_6("6"),
CARD_5("5"),
CARD_4("4"),
CARD_3("3");
private final String cardNumber;
CardNumberEnum(String cardNumber) {
this.cardNumber = cardNumber;
}
@Override
public String toString() {
return cardNumber;
}
}
package com.lagou.com.lagou.part3homework.Card;
/**
* @author 西风月
* @date 2020/8/3
* @description
*/
public class OneCard {
private CardColorEnum color; //牌花色
private CardNumberEnum number; //牌面值
private Integer value; //权重
public OneCard(CardColorEnum color, CardNumberEnum number, Integer value) {
this.color = color;
this.number = number;
this.value = value;
}
@Override
public String toString() {
return (color==null ? "" : color + "-") + number;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
}
package com.lagou.com.lagou.part3homework.Card;
import java.util.*;
/**
* @author 西风月
* @date 2020/8/3
* @description
*/
public class PlayCard {
public static void main(String[] args) {
//1. 声明列表
List<OneCard> card = new LinkedList<>();
//2. 因大王、小王没有花色且值最大,先单独插入列表 ,保证权重递减
card.add(new OneCard(null, CardNumberEnum.CARD_DW, 54));
card.add(new OneCard(null, CardNumberEnum.CARD_XW,53));
int i = 0;
//3. 初始化Card列表, 根据牌型大小插牌 权重依次递减
for(CardNumberEnum number : CardNumberEnum.values()) { //牌面值
if(number == CardNumberEnum.CARD_XW || number == CardNumberEnum.CARD_DW) continue; //跳过大王、小王
for(CardColorEnum color : CardColorEnum.values()) { //牌花色
card.add(new OneCard(color, number,52 - i++));
}
}
//声明四个ArrayList集合
List<OneCard> lA = new LinkedList<>(); //玩家1
List<OneCard> lB = new LinkedList<>(); //玩家2
List<OneCard> lC = new LinkedList<>(); //玩家3
List<OneCard> lDP = new LinkedList<>(); //底牌
int tmp = 0;
Collections.shuffle(card);
for(OneCard oc : card) {
if(tmp >= 51) {
lDP.add(oc);
continue;
};
if(tmp%3 == 0) {
lA.add(oc);
} else if(tmp%3 == 1){
lB.add(oc);
} else {
lC.add(oc);
}
tmp++;
}
//构造比较器对指定列表进行排序
Comparator<OneCard> comparator = (OneCard o2, OneCard o1) -> {return o1.getValue() - o2.getValue();};
Collections.sort(lDP, comparator);
Collections.sort(lA, comparator);
Collections.sort(lB, comparator);
Collections.sort(lC, comparator);
System.out.println("底牌:" + Arrays.toString(lDP.toArray()));
System.out.println("玩家-1的牌型如下:" + Arrays.toString(lA.toArray()));
System.out.println("玩家-2的牌型如下:" + Arrays.toString(lB.toArray()));
System.out.println("玩家-3的牌型如下:" + Arrays.toString(lC.toArray()));
}
}
- 输出:
"C:\Program Files\Java\jdk-11.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=3614:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\javase\out\production\javase com.lagou.com.lagou.part3homework.Card.PlayCard
底牌:[♣-7, ♦-7, ♦-6]
玩家-1的牌型如下:[大王, ♥-A, ♠-K, ♠-Q, ♦-Q, ♠-J, ♣-J, ♥-10, ♦-10, ♦-9, ♣-8, ♥-7, ♥-5, ♠-5, ♣-5, ♣-4, ♥-3]
玩家-2的牌型如下:[小王, ♥-2, ♠-2, ♣-2, ♦-2, ♠-A, ♣-A, ♦-A, ♥-K, ♥-Q, ♠-10, ♠-7, ♥-6, ♠-6, ♣-6, ♥-4, ♠-3]
玩家-3的牌型如下:[♣-K, ♦-K, ♣-Q, ♥-J, ♦-J, ♣-10, ♥-9, ♠-9, ♣-9, ♥-8, ♠-8, ♦-8, ♦-5, ♠-4, ♦-4, ♣-3, ♦-3]
Process finished with exit code 0
"C:\Program Files\Java\jdk-11.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=3664:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\javase\out\production\javase com.lagou.com.lagou.part3homework.Card.PlayCard
底牌:[小王, ♦-2, ♣-J]
玩家-1的牌型如下:[大王, ♥-2, ♣-2, ♥-A, ♠-A, ♣-A, ♠-K, ♠-10, ♣-10, ♥-9, ♦-9, ♥-8, ♠-8, ♥-7, ♠-4, ♣-4, ♦-4]
玩家-2的牌型如下:[♣-K, ♦-K, ♠-Q, ♣-Q, ♥-J, ♠-J, ♦-10, ♠-9, ♣-8, ♦-8, ♣-7, ♥-6, ♠-6, ♦-6, ♦-5, ♥-4, ♦-3]
玩家-3的牌型如下:[♠-2, ♦-A, ♥-K, ♥-Q, ♦-Q, ♦-J, ♥-10, ♣-9, ♠-7, ♦-7, ♣-6, ♥-5, ♠-5, ♣-5, ♥-3, ♠-3, ♣-3]
Process finished with exit code 0
"C:\Program Files\Java\jdk-11.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=3649:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\javase\out\production\javase com.lagou.com.lagou.part3homework.Card.PlayCard
底牌:[♠-A, ♥-8, ♦-4]
玩家-1的牌型如下:[大王, 小王, ♥-2, ♠-2, ♣-A, ♠-J, ♣-J, ♠-10, ♣-10, ♣-9, ♥-7, ♠-7, ♣-7, ♣-6, ♥-5, ♣-5, ♣-4]
玩家-2的牌型如下:[♣-2, ♦-2, ♥-A, ♥-K, ♠-K, ♦-K, ♥-J, ♦-J, ♥-9, ♦-9, ♣-8, ♦-7, ♠-6, ♦-5, ♥-4, ♥-3, ♣-3]
玩家-3的牌型如下:[♦-A, ♣-K, ♥-Q, ♠-Q, ♣-Q, ♦-Q, ♥-10, ♦-10, ♠-9, ♠-8, ♦-8, ♥-6, ♦-6, ♠-5, ♠-4, ♠-3, ♦-3]
Process finished with exit code 0