17_实例
实例1
编程统计字符串"``ABCD123!@#$%ab`"中大写字母、小写字母、数字、其它字符的个数并打 印出来。
homework01.java
package cn.itcast.module2.demo06;
import java.util.HashMap;
public class homework01 {
public static void main(String[] args) {
StringBuilder str1 = new StringBuilder("ABCD123!@#$%ab");
HashMap<String, Integer> hp1 = new HashMap<String, Integer>();
hp1.put("大写字母个数", 0);
hp1.put("小写字母个数", 0);
hp1.put("数字个数", 0);
hp1.put("其他字符个数", 0);
for (int i = 0; i < str1.length(); i++) {
char str2 = str1.charAt(i);
if (Character.isUpperCase(str2)) {
hp1.put("大写字母个数", hp1.get("大写字母个数") + 1);
} else if (Character.isLowerCase(str2)) {
hp1.put("小写字母个数", hp1.get("小写字母个数") + 1);
} else if (Character.isDigit(str2)) {
hp1.put("数字个数", hp1.get("数字个数") + 1);
} else {
hp1.put("其他字符个数", hp1.get("其他字符个数") + 1);
}
}
System.out.println("hp1 = " + hp1);
}
}
//执行结果
hp1 = {数字个数=3, 其他字符个数=5, 大写字母个数=4, 小写字母个数=2}
实例2
编程获取两个指定字符串中的最大相同子串。 如: s1="asdafghjka"
, s2="aaasdfg"
他们的最大子串为"asd"
提示: 将短的那个串进行长度依次递减的子串与较长的串比较。
homework02.java
package cn.itcast.module2.demo06;
import java.util.HashMap;
public class homework02 {
public static void getMaxSameSubString(StringBuilder str1, StringBuilder str2) {
StringBuilder shortstr = str1.length() > str2.length() ? str2 : str1;
StringBuilder longstr = str1.length() > str2.length() ? str1 : str2;
HashMap map = new HashMap();
for (int i = 0; i <= shortstr.length(); i++) {
for (int j = 0; j < i; j++) {
//System.out.println("[" + shortstr.substring(j, i) + "]");
if (!"".equals(shortstr.substring(j, i)) && String.valueOf(longstr).contains(shortstr.substring(j, i))) {
map.put(shortstr.substring(j, i), shortstr.substring(j, i).length());
}
}
}
int max = 0;
for (Object len : map.values()) {
max = Math.max(max, Integer.parseInt(String.valueOf(len)));
}
for (Object key : map.keySet()) {
int keyLength = Integer.parseInt(String.valueOf(map.get(key)));
if (max == keyLength) {
System.out.println("最大相同子串是: " + key);
}
}
}
public static void main(String[] args) {
StringBuilder stb1 = new StringBuilder("aaasdasdfgfghjka");
StringBuilder stb2 = new StringBuilder("aaasdfg");
getMaxSameSubString(stb1, stb2);
}
}
//执行结果:
最大相同子串是: aaasd
最大相同子串是: asdfg
实例3
准备一个 HashMap 集合,统计字符串"123,456,789,123,456"中每个数字字符串出现的次数并打印出来。
如:
123 出现了 2 次
456 出现了 2 次
789 出现了 1 次
homework03.java
package cn.itcast.module2.demo06;
import java.util.HashMap;
public class homework03 {
public static void getCount(String str) {
String[] split = str.split(",");
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < split.length; i++) {
String str2 = split[i].trim();
if (null == map.get(str2)) {
map.put(str2, 1);
} else {
map.put(str2, Integer.parseInt(String.valueOf(map.get(str2))) + 1);
}
}
System.out.println(map);
}
public static void main(String[] args) {
getCount("123,234,234,345,345,345,456,456,456,456,");
}
}
//执行结果:
{123=1, 234=2, 345=3, 456=4}
实例4
使用 List 集合实现简易的学生信息管理系统,要求打印字符界面提示用户选择相应的功 能,根据用户输入的选择去实现增加、删除、修改、查找以及遍历所有学生信息的功能。
其中学生的信息有:学号、姓名、年龄。 要求: 尽量将功能拆分为多个.java
文件。
Student.java
package cn.itcast.module2.demo06.homework04;
import java.util.Objects;
public class Student {
private int id;
private String name;
private int age;
public Student() {
}
public Student(int id, String name, int age) {
setId(id);
setName(name);
setAge(age);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return id == student.id &&
age == student.age &&
Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name, age);
}
public static void main(String[] args) {
Student stu1 = new Student(1, "李海涛", 12);
Student stu2 = new Student(1, "李海涛", 12);
System.out.println(stu1 == stu2);
System.out.println(stu1.equals(stu2));
}
}
StudentInfoManagementSystem.java
package cn.itcast.module2.demo06.homework04;
import java.util.LinkedList;
public class StudentInfoManagementSystem {
private LinkedList<Student> stuInfo = new LinkedList<Student>();
public StudentInfoManagementSystem() {
}
public LinkedList<Student> getStuInfo() {
return stuInfo;
}
public Boolean add(Student stu) {
return this.stuInfo.add(stu);
}
public Boolean del(Student stu) {
return this.stuInfo.remove(stu);
}
public Student del(int index) {
return this.stuInfo.remove(index);
}
public Student set(int index, Student stu) {
return this.stuInfo.set(index, stu);
}
public Student get(int index) {
return this.stuInfo.get(index);
}
public int intindexOf(Student stu) {
return this.stuInfo.indexOf(stu);
}
public void printOneByOne() {
for (int i = 0; i < this.stuInfo.size(); i++) {
System.out.println(this.stuInfo.get(i));
}
}
}
Start.java
package cn.itcast.module2.demo06.homework04;
import java.util.HashSet;
import java.util.Scanner;
public class Start {
public static void main(String[] args) {
StudentInfoManagementSystem sims = new StudentInfoManagementSystem();
while (true) {
System.out.println("\n----------------------------------------------------------------------");
System.out.print("菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)\n请输入您的选项:");
Scanner sc = new Scanner(System.in);
String choise = sc.next();
if (choise.trim().equals("增加") || choise.trim().equals("A")) {
System.out.print("请输入学生ID: ");
int id = sc.nextInt();
System.out.print("请输入学生姓名: ");
String name = sc.next();
System.out.print("请输入学生年龄: ");
int age = sc.nextInt();
Student stu = new Student(id, name, age);
Boolean addRes = sims.add(stu);
if (!addRes) {
System.out.println("添加学生失败!");
} else {
System.out.println("添加学生" + stu.toString() + "成功!");
}
} else if (choise.trim().equals("删除") || choise.trim().equals("B")) {
System.out.print("请输入学生ID: ");
int id = sc.nextInt();
System.out.print("请输入学生姓名: ");
String name = sc.next();
System.out.print("请输入学生年龄: ");
int age = sc.nextInt();
Student stu = new Student(id, name, age);
for (int i = 0; i < sims.getStuInfo().size(); i++) {
if (stu.equals(sims.getStuInfo().get(i))) {
sims.del(i);
System.out.println("学生" + stu.toString() + "已成功删除!");
}
}
} else if (choise.trim().equals("修改") || choise.trim().equals("C")) {
System.out.print("请输入学生ID: ");
int id = sc.nextInt();
System.out.print("请输入学生姓名: ");
String name = sc.next();
System.out.print("请输入学生年龄: ");
int age = sc.nextInt();
Student stu = new Student(id, name, age);
System.out.print("请输入修改后的学生ID: ");
int id2 = sc.nextInt();
System.out.print("请输入修改后的学生姓名: ");
String name2 = sc.next();
System.out.print("请输入修改后的学生年龄: ");
int age2 = sc.nextInt();
Student stu2 = new Student(id2, name2, age2);
Boolean flag = false;
for (int i = 0; i < sims.getStuInfo().size(); i++) {
if (stu.equals(sims.getStuInfo().get(i))) {
sims.set(i, stu2);
System.out.println("学生" + stu.toString() + "已修改为" + stu2.toString());
flag = true;
}
}
if (!flag) {
System.out.println("学生" + stu.toString() + "在系统中不存在!");
}
} else if (choise.trim().equals("单独查找") || choise.trim().equals("D")) {
System.out.print("请输入学生ID(未知则输入-1): ");
int id = sc.nextInt();
System.out.print("请输入学生姓名(未知则输入.): ");
String name = sc.next().trim();
System.out.print("请输入学生年龄(未知则输入-1): ");
int age = sc.nextInt();
if (id == -1 && name.equals(".") && age == -1) {
System.out.println("至少有一个参数有数值!");
continue;
}
HashSet studentSet = new HashSet();
for (int i = 0; i < sims.getStuInfo().size(); i++) {
Student stu = sims.getStuInfo().get(i);
if (stu.getId() == id) {
studentSet.add(stu);
}
if (stu.getName().equals(name)) {
studentSet.add(stu);
}
if (stu.getAge() == age) {
studentSet.add(stu);
}
}
System.out.println("查询结果是: " + studentSet);
} else if (choise.trim().equals("查看所有") || choise.trim().equals("E")) {
sims.printOneByOne();
} else {
System.out.println("您的输入有误,请重新输入!");
}
}
}
}
//运行start.java
//运行结果是:
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:A
请输入学生ID: 1
请输入学生姓名: 刘备
请输入学生年龄: 40
添加学生Student{id=1, name='刘备', age=40}成功!
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:A
请输入学生ID: 2
请输入学生姓名: 关羽
请输入学生年龄: 38
添加学生Student{id=2, name='关羽', age=38}成功!
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:A
请输入学生ID: 3
请输入学生姓名: 张飞
请输入学生年龄: 35
添加学生Student{id=3, name='张飞', age=35}成功!
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:A
请输入学生ID: 4
请输入学生姓名: 赵云
请输入学生年龄: 27
添加学生Student{id=4, name='赵云', age=27}成功!
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:C
请输入学生ID: 4
请输入学生姓名: 赵云
请输入学生年龄: 27
请输入修改后的学生ID: 4
请输入修改后的学生姓名: 赵云
请输入修改后的学生年龄: 26
学生Student{id=4, name='赵云', age=27}已修改为Student{id=4, name='赵云', age=26}
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:E
Student{id=1, name='刘备', age=40}
Student{id=2, name='关羽', age=38}
Student{id=3, name='张飞', age=35}
Student{id=4, name='赵云', age=26}
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:D
请输入学生ID(未知则输入-1): 4
请输入学生姓名(未知则输入.): 。
请输入学生年龄(未知则输入-1): -1
查询结果是: [Student{id=4, name='赵云', age=26}]
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:B
请输入学生ID: 1
请输入学生姓名: 刘备
请输入学生年龄: 40
学生Student{id=1, name='刘备', age=40}已成功删除!
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:E
Student{id=2, name='关羽', age=38}
Student{id=3, name='张飞', age=35}
Student{id=4, name='赵云', age=26}
----------------------------------------------------------------------
菜单: 增加(A) 删除(B) 修改(C) 单独查找(D) 查看所有(E)
请输入您的选项:
实例5
使用集合实现斗地主游戏的部分功能,要求如下:
(1)首先准备54 张扑克牌并打乱顺序。
(2)由三个玩家交替摸牌,每人17 张扑克牌,最后三张留作底牌。
(3)查看三个玩家手中的扑克牌和底牌。
(4)其中玩家手中的扑克牌需要按照大小顺序打印,规则如下:
手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
Card.java
package cn.itcast.module2.demo06.homework05;
import java.util.Objects;
public class Card {
private String name;
private String attribute;
public Card() {
}
public Card(String name, String attribute) {
setName(name);
setAttribute(attribute);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAttribute() {
return attribute;
}
public void setAttribute(String attribute) {
this.attribute = attribute;
}
@Override
public String toString() {
return "Card{" +
"name='" + name + '\'' +
", attribute='" + attribute + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Card card = (Card) o;
return Objects.equals(name, card.name) &&
Objects.equals(attribute, card.attribute);
}
@Override
public int hashCode() {
return Objects.hash(name, attribute);
}
}
PokerWeight.java
package cn.itcast.module2.demo06.homework05;
import java.util.HashMap;
public class PokerWeight {
private HashMap pokerweight = new HashMap();
public PokerWeight() {
setPokerWeight();
}
public HashMap getPokerWeight() {
return pokerweight;
}
public void setPokerWeight() {
//HashMap pokerWeight = new HashMap();
pokerweight.put("JOKER", "100");
pokerweight.put("joker", "99");
pokerweight.put("2", "98");
pokerweight.put("A", "97");
pokerweight.put("K", "96");
pokerweight.put("Q", "95");
pokerweight.put("J", "94");
pokerweight.put("10", "93");
pokerweight.put("9", "92");
pokerweight.put("8", "91");
pokerweight.put("7", "90");
pokerweight.put("6", "89");
pokerweight.put("5", "88");
pokerweight.put("4", "87");
pokerweight.put("3", "86");
}
}
Poker.java
package cn.itcast.module2.demo06.homework05;
import java.util.*;
public class Poker {
private List<Card> orderedPoker = new LinkedList<Card>();
private List<Card> disorderedPoker = new LinkedList<Card>();
public Poker() {
setOrderedPoker();
setDisorderedPoker();
}
public List<Card> getOrderedPoker() {
return orderedPoker;
}
public void setOrderedPoker() {
for (int i = 1; i <= 13; i++) {
if (i == 1) {
this.orderedPoker.add(new Card("A", "黑桃"));
this.orderedPoker.add(new Card("A", "红桃"));
this.orderedPoker.add(new Card("A", "梅花"));
this.orderedPoker.add(new Card("A", "方块"));
} else if (i == 11) {
this.orderedPoker.add(new Card("J", "黑桃"));
this.orderedPoker.add(new Card("J", "红桃"));
this.orderedPoker.add(new Card("J", "梅花"));
this.orderedPoker.add(new Card("J", "方块"));
} else if (i == 12) {
this.orderedPoker.add(new Card("Q", "黑桃"));
this.orderedPoker.add(new Card("Q", "红桃"));
this.orderedPoker.add(new Card("Q", "梅花"));
this.orderedPoker.add(new Card("Q", "方块"));
} else if (i == 13) {
this.orderedPoker.add(new Card("K", "黑桃"));
this.orderedPoker.add(new Card("K", "红桃"));
this.orderedPoker.add(new Card("K", "梅花"));
this.orderedPoker.add(new Card("K", "方块"));
} else {
this.orderedPoker.add(new Card(String.valueOf(i), "黑桃"));
this.orderedPoker.add(new Card(String.valueOf(i), "红桃"));
this.orderedPoker.add(new Card(String.valueOf(i), "梅花"));
this.orderedPoker.add(new Card(String.valueOf(i), "方块"));
}
}
this.orderedPoker.add(new Card("joker", ""));
this.orderedPoker.add(new Card("JOKER", ""));
}
public List<Card> getDisorderedPoker() {
Collections.shuffle(this.disorderedPoker);
return this.disorderedPoker;
}
public void setDisorderedPoker() {
this.disorderedPoker.addAll(this.orderedPoker);
Collections.shuffle(this.disorderedPoker);
}
public static void makeOrderly(List<Card> mypoker, int left, int right) {
//如果left等于right,即数组只有一个元素,直接返回
if (left > right) {
return;
}
//设置最左边的元素为基准值
int key = Integer.parseInt(String.valueOf(new PokerWeight().getPokerWeight().get(mypoker.get(left).getName())));
Card key1 = mypoker.get(left);
//数组中比key小的放在左边,比key大的放在右边,key值下标为i
int i = left; //左指针
int j = right;//右指针
while (i < j) {
//j向左移,直到遇到比key小的值
while (Integer.parseInt(String.valueOf(new PokerWeight().getPokerWeight().get(mypoker.get(j).getName()))) >= key && i < j) {
j--;
}
//i向右移,直到遇到比key大的值
while (Integer.parseInt(String.valueOf(new PokerWeight().getPokerWeight().get(mypoker.get(i).getName()))) <= key && i < j) {
i++;
}
//i和j指向的元素交换
if (i < j) {
Card temp2 = mypoker.get(i);
mypoker.set(i, mypoker.get(j));
mypoker.set(j, temp2);
}
}
mypoker.set(left, mypoker.get(i));
mypoker.set(i, key1);
makeOrderly(mypoker, left, i - 1);
makeOrderly(mypoker, i + 1, right);
}
public static void main(String[] args) {
Poker poker = new Poker();
List<Card> mypoker = poker.getDisorderedPoker();
Poker.makeOrderly(mypoker, 0, mypoker.size() - 1);
System.out.println("mypoker = " + mypoker);
}
}
PlayCards.java
package cn.itcast.module2.demo06.homework05;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class PlayCards {
public static void main(String[] args) {
Person person1 = new Person("刘备");
Person person2 = new Person("关羽");
Person person3 = new Person("张飞");
Poker poker = new Poker();
List<Card> disorderedPoker = poker.getDisorderedPoker();
List<Card> dizhuPai = new ArrayList<Card>();
dizhuPai.add(disorderedPoker.remove(disorderedPoker.size() - 1));
dizhuPai.add(disorderedPoker.remove(disorderedPoker.size() - 1));
dizhuPai.add(disorderedPoker.remove(disorderedPoker.size() - 1));
System.out.println("地主牌是:" + dizhuPai);
Iterator<Card> iterator = disorderedPoker.iterator();
while (iterator.hasNext()) {
person1.setCards(iterator.next());
person2.setCards(iterator.next());
person3.setCards(iterator.next());
}
List<Card> cardsOfPerson1 = person1.getCards();
List<Card> cardsOfPerson2 = person2.getCards();
List<Card> cardsOfPerson3 = person3.getCards();
Poker.makeOrderly(cardsOfPerson1, 0, cardsOfPerson1.size() - 1);
Poker.makeOrderly(cardsOfPerson2, 0, cardsOfPerson2.size() - 1);
Poker.makeOrderly(cardsOfPerson3, 0, cardsOfPerson3.size() - 1);
System.out.println(person1.getName() + "的手牌是:" + cardsOfPerson1);
System.out.println(person2.getName() + "的手牌是:" + cardsOfPerson2);
System.out.println(person3.getName() + "的手牌是:" + cardsOfPerson3);
}
}
//运行PlayCards.java
//运行结果是:
地主牌是:[Card{name='A', attribute='梅花'}, Card{name='J', attribute='方块'}, Card{name='2', attribute='梅花'}]
刘备的手牌是:[Card{name='3', attribute='梅花'}, Card{name='3', attribute='黑桃'}, Card{name='3', attribute='方块'}, Card{name='4', attribute='红桃'}, Card{name='5', attribute='黑桃'}, Card{name='6', attribute='黑桃'}, Card{name='7', attribute='黑桃'}, Card{name='8', attribute='黑桃'}, Card{name='8', attribute='方块'}, Card{name='9', attribute='黑桃'}, Card{name='10', attribute='红桃'}, Card{name='10', attribute='方块'}, Card{name='K', attribute='梅花'}, Card{name='A', attribute='方块'}, Card{name='2', attribute='红桃'}, Card{name='2', attribute='方块'}, Card{name='JOKER', attribute=''}]
关羽的手牌是:[Card{name='4', attribute='黑桃'}, Card{name='5', attribute='红桃'}, Card{name='6', attribute='梅花'}, Card{name='7', attribute='红桃'}, Card{name='7', attribute='方块'}, Card{name='7', attribute='梅花'}, Card{name='9', attribute='梅花'}, Card{name='10', attribute='黑桃'}, Card{name='J', attribute='梅花'}, Card{name='Q', attribute='方块'}, Card{name='Q', attribute='红桃'}, Card{name='K', attribute='方块'}, Card{name='K', attribute='红桃'}, Card{name='K', attribute='黑桃'}, Card{name='A', attribute='黑桃'}, Card{name='A', attribute='红桃'}, Card{name='joker', attribute=''}]
张飞的手牌是:[Card{name='3', attribute='红桃'}, Card{name='4', attribute='方块'}, Card{name='4', attribute='梅花'}, Card{name='5', attribute='方块'}, Card{name='5', attribute='梅花'}, Card{name='6', attribute='红桃'}, Card{name='6', attribute='方块'}, Card{name='8', attribute='梅花'}, Card{name='8', attribute='红桃'}, Card{name='9', attribute='红桃'}, Card{name='9', attribute='方块'}, Card{name='10', attribute='梅花'}, Card{name='J', attribute='黑桃'}, Card{name='J', attribute='红桃'}, Card{name='Q', attribute='黑桃'}, Card{name='Q', attribute='梅花'}, Card{name='2', attribute='黑桃'}]