Java实现简单赛事通知(大二水平)

2023-05-16

目录

前言

代码

总结



前言

实验目的与要求

了解接口与多态的应用场景,熟练掌握接口的定义与实现类的编写,了解面向对象的设计原则,能够灵活应用接口、继承和组合构建更具弹性的软件架构,初步体验面向对象设计原则应用对于提升程序质量的好处。

实验内容

以赛促学,学校非常重视课外科技竞赛,参加课外科技竞赛是非常重要的第二课堂活动,课外科技竞赛赛事众多,有ACM算法类竞赛,有“互联网+”创新创业类竞赛等,不同同学关注不同比赛(可能关注多个赛事),编程模拟实现赛事发布与接收,要求实现赛事精准推送(即只要发布赛事,学生只会自动收到关注的赛事信息且不会遗漏)

 这里我是先创建学生名字,再询问学生要关注的赛事(这里使用map存),最后学校发布赛事,遍历这里的map,通过key比对每个学生的关注是否与发布的赛事相同,相同则将相同的赛事信息与Student放进新的map中,最后显示出来。


 

代码

 Student:定义Student

public class Student {

	private String name;

	public Student(String name) {
		// TODO Auto-generated method stub
		this.name = name;
	}

	public String getName(String name) {
		// TODO Auto-generated method stub
		return name;
	}

	@Override
	public String toString() {
		return name;
	}
}

Competition:定义Competition

public class Competition{

	private String cname;
	private String inf;

	public Competition(String cname, String inf) {
		// TODO Auto-generated method stub
		this.inf = inf;
		this.cname = cname;
	}

	public String getName(String cname) {
		// TODO Auto-generated method stub
		return cname;
	}

	public String getNo(String inf) {
		// TODO Auto-generated method stub
		return inf;
	}

	@Override
	public String toString() {
		return "赛名:'" + cname + '\'' + ", 信息:'" + inf + '\'' ;
	}
	
}

 Create:用于创建学生和学校发布竞赛

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Create {
	List<Student> students = new ArrayList<>();
	List<Competition> competitions = new ArrayList<>();
	static Scanner scanner = new Scanner(System.in);
	
	public List<Student> createStudent() {
		System.out.println("开始创建学生");
		int num = 1;
		System.out.println("请输入学生" + num + "的名字:");
		num++;
		String sname;
		while (!(sname = scanner.nextLine()).isEmpty()) { // 输入完毕直接按回车
			System.out.println("请输入学生" + num + "的名字:");
			Student student = new Student(sname);
			students.add(student);
			num++;
		}
		System.out.println("创建学生结束");
		return students;
	}

	public List<Competition> createCompetition() {		//这里可以创建重复的竞赛
		System.out.println("您选择创建多少个竞赛?");
		int comGeShu = scanner.nextInt();
		for (int i = 0; i < comGeShu; i++) {
			String cname = get();
			System.out.println("请输入竞赛" + cname + "的简介:");
			String inf = scanner.next();
			Competition competition = new Competition(cname, inf);
			competitions.add(competition);
		}
		return competitions;
	}

	public String get() {
		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("-------------------------");
		System.out.println("给出您的选择:");
		int competition = scanner.nextInt();
		String cname = null;
		if (competition == 1) {
			cname = "天梯赛";
		} else if (competition == 2) {
			cname = "中国计算机设计大赛";
		} else if (competition == 3) {
			cname = "蓝桥杯个人赛软件类";
		} else if (competition == 4) {
			cname = "互联网比赛";
		} else {
			System.out.println("未找到该竞赛");
		}
		return cname;
	}
}

 Choose:学生选择关注的赛事

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

public class Choose {	//学生选择收藏
	List<Student> students = new ArrayList<>();
	static HashMap<Student, List<String>> want = new HashMap<>();
	static Scanner scanner = new Scanner(System.in);

	public Choose(List<Student> students) {
		this.students = students;
	}

	public HashMap<Student, List<String>> ChooseAll() { // 把学生和他的关注列表放入map
		for (int i = 0; i < students.size(); i++) {
			List<String> oneChoose = new ArrayList<>();
			oneChoose = find(i);
			Student sname = students.get(i);
			want.put(sname, oneChoose);
		}
		return want;
	}

	public List<String> find(int i) { // 选择单个学生想要关注的竞赛并放入列表
		List<String> competitions = new ArrayList<>();
		System.out.println("");
		System.out.println("选择" + students.get(i) + "想关注的竞赛");
		System.out.println("-------------------------");
		System.out.println("1.--       天梯赛      --");
		System.out.println("2.-- 中国计算机设计大赛 --");
		System.out.println("3.-- 蓝桥杯个人赛软件类 --");
		System.out.println("4.--    “互联网+”比赛   --");
		System.out.println("-------------------------");
		System.out.println("");
		System.out.println("给出您的选择:");
		String competition;
		while (!(competition = scanner.nextLine()).isEmpty()) {
			System.out.println("给出您的选择:");
			if (competition.equals("1")) {
				competitions.add("天梯赛");
			} else if (competition.equals("2")) {
				competitions.add("中国计算机设计大赛");
			} else if (competition.equals("3")) {
				competitions.add("蓝桥杯个人赛软件类");
			} else if (competition.equals("4")) {
				competitions.add("互联网比赛");
			} else {
				System.out.println("未找到该竞赛");
			}
		}
		return competitions;
	}

	
	public Set<Student> getKeys() {
		Set<Student> stu = new HashSet<>();
		stu.addAll(want.keySet());
		return stu;
	}

Main:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
	static Create create = new Create();
	static List<Student> students = new ArrayList<>();
	static List<Competition> competitions = new ArrayList<>();
	static HashMap<Student, List<String>> want = new HashMap<>();
	static HashMap<Student, List<Competition>> message = new HashMap<>();

	public static void main(String[] args) {
		students = create.createStudent(); // 创建student
		Choose choose = new Choose(students);
		want = choose.ChooseAll(); // 创建map以学生为key 以想要的竞赛为value(list)
		competitions = create.createCompetition(); // 学校发布competition
		System.out.println("学校发布的赛事 :" + competitions.toString());
		Set<Student> keys = choose.getKeys();
		for (Student key : keys) {
			List<Competition> repeat = new ArrayList<>();
			repeat = receipt(key);
			message.put(key, repeat);
		}
		Set<Student> Mkeys = getMkeys();
		for (Student key : Mkeys) {
			System.out.println("学生" + key + " 关注的赛事 :" + message.get(key).toString());
		}

	}

	public static List<Competition> receipt(Student key) {
		List<String> values = new ArrayList<>();	 // 新list存value
		values.addAll(want.get(key));
		Competition rep = null;
		List<Competition> repeat = new ArrayList<>();	// 重复的赛事信息
		for (int i = 0; i < values.size(); i++) {	 // 从收藏夹找
			int flag=0;
			for (int j = 0; j < competitions.size() && flag==0; j++) {
				String Index = values.get(i);
				String queryString = competitions.get(j).toString();
				Pattern pattern = Pattern.compile(Index); 		// 从所有竞赛检索
				Matcher matcher = pattern.matcher(queryString);
				while (matcher.find()) {
					rep = competitions.get(j);
					repeat.add(rep);
					flag=1;
				}
			}
		}
		return repeat;
	}

	public static Set<Student> getMkeys() {
		Set<Student> stu = new HashSet<>();
		stu.addAll(message.keySet());
		return stu;
	}

}

 


总结

方法与类的定义不够简洁严谨,结构较复杂且一些输入格式的错误未解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java实现简单赛事通知(大二水平) 的相关文章

随机推荐

  • 新手村——如何改变CSDN代码块背景样式

    1 在电脑上登录自己CSDN账号 xff1b 2 按如下指示操作 xff1a 鼠标滑动至头像处 xff0c 点击下方的内容管理 xff1b 3 在左方中一直下滑 xff0c 找到设置中的博客设置 xff1b 4 在代码样式片中选择自己喜欢的
  • antd的Form实例控制表格,表格可收集/回显数据

    大概就是如图的效果 xff0c 但是需要控制数据的收集和回显 首先看到这个页面 xff0c 第一眼就想到table表格 但是我翻阅了下antd的Table组件 xff0c 发现只能展示数据 也有可编辑单元格 但是我需要这里的表格 xff0c
  • 网络字节序、大小端模式

    多字节数据的存储顺序称为字节序 分为大 小端模式 xff1a 大端 xff1a 数据高位对应低地址 小端 xff1a 数据高位对应高地址 可以通过下面的程序 测试自己的机器是大端字节序还是小端字节序 用共用体的方式来测试 xff1a spa
  • C++运算符重载详解

    目录 什么是运算符重载 运算符重载的意义 运算符重载的语法格式 简单例子 43 运算符的重载 代码分析 运算符重载的两种方式 1 重载为类的成员函数 1 双目运算符 2 单目运算符 2 重载为类的友元函数 1 重载格式 2 调用格式 两种重
  • 微信登录老是间歇式失败

    在微信小程的开发中 xff0c 登录问题 xff0c 一定要按照这样的顺序 1 小程序请求login xff0c 拿到code 然后传给服务端 xff1b 2 服务端拿到code 到微信服务器拿到sessionKey xff1b 3 然后小
  • Python爬虫编程7——多线程爬虫

    目录 一 多线程基本介绍 程序中模拟多任务 二 多线程的创建 三 主线程与子线程的执行关系 四 查看线程数量 五 线程间的通信 xff08 多线程共享全局变量 xff09 六 线程间的资源竞争 互斥锁和死锁 互斥锁 死锁 七 Queue线程
  • 嵌入式蓝桥杯客观题总结(4.19)

    1 DMA xff08 1 xff09 DMA是否需要经过MCU访问内存 xff1f xff08 2 xff09 在STM32处理器中一个DMA请求 xff0c 至少占用 xff08 xff09 个周期的CPU访问系统总线时间 A 1 B
  • PixHawk 4用作四旋翼DIY调试部分笔记

    PixHawk 4用作四旋翼DIY调试部分笔记 序所使用的设备器件问题整理短暂结语 序 这是用于记录DIY组装的基于PixHawk 4的四旋翼时所遇到的部分有趣的而又比较耗时才能查找或者仍未能查找到解决方案 xff0c 自行针对当下所处环境
  • CentOS虚拟机可以ping通主机,但是主机ping虚拟机请求超时解决办法

    我用ssh连不上虚拟机 xff0c 找了好多博客 xff0c 试了好多方法 xff0c ip都背得了 xff0c 方法也都差不多千篇一律 xff0c 还是没能解决 xff0c 卡了我好几个小时 xff0c 最后在一次无意的尝试中解决了 xf
  • 麦克纳姆轮PID控制原理

    目录 前言 一 什么是麦克纳姆轮 二 运动原理 三 pid控制 一 什么是pid xff1f 二 什么是串级PID xff1f 三 麦克娜姆轮的控制思想 总结 前言 目前很多大学生比赛里面经常都会出现麦克娜姆轮 xff0c 并且麦克娜姆轮在
  • Matlab在线运行网址

    下载正版matlab麻烦 xff0c 耗内存 xff0c 在线的matlab运行器不香吗 xff1f 在线运行网址 打开后是这样的一个界面 然后我们把左边框的内容换成自己的代码之后点击Execute运行就可以在右边显示代码的运行结果了
  • 《手把手教你学嵌入式无人机》——入门航模遥控器使用(MC6C)

    一 MC6C入门航模遥控器简介 六通道MC6C迈克遥控器是普遍使用的一款入门航模遥控器 xff0c 价格较为低廉 xff0c 同时性能比较稳定 xff0c 性价比较高 遥控器与接收机 1 基本参数 xff1a 遥控器 xff1a 遥控范围
  • (一)Jetson Agx Xavier 装系统Ubuntu

    买不到nvidia Agx Xavier 所以用的是rtimes代替 目前是暑假打算做一辆无人车玩玩 拿到手后和树莓派 TX2感觉很像 xff0c 可以直接插鼠标键盘 显示器网线等还是很方便 虽然不是原厂 xff0c 看手册应该是 nvid
  • (三)Jetson Agx Xavier 串口使用

    暂时没有需要串口的地方 xff0c 不过先写在这备用 xff0c 主要就是配置一下 dev ttyTHS1这里的串口 xff0c 波特率 xff0c 奇偶校验这些 xff0c 比较简单 xff0c 和正常的电脑配置串口差不多 uart py
  • Ubuntu18.04实现ROS安装及小海龟实例

    目录 一 ROS简介1 含义2 发展 二 ROS安装1 添加软件源2 添加密钥3 安装ROS4 初始化rosdep5 设置环境变量 三 小海龟实例1 运行小海龟2 话题器查看节点信息3 控制量移动海龟4 C 43 43 程序编写小海龟圆形
  • iviewadmin本地调试线上接口

    修改vue config js文件 xff1a devServer proxy 39 adminapi 39 target 39 这里写自己的域名 api 39 changeOrigin true pathRewrite function
  • ESP32之FreeRTOS--任务的创建和运行

    文章目录 前言一 创建任务和删除函数1 xTaskCreate 2 xTaskCreateStatic 3 xTaskCreateRestricted 4 vTaskDelete 二 任务函数和任务控制块TCB1 任务函数模板2 TCB 三
  • Linux之V4L2驱动框架

    目录 一 V4L2简介 二 V4L2操作流程 1 打开摄像头 2 查询设备的属性 能力 功能 3 获取摄像头支持的格式 4 设置摄像头的采集通道 5 设置 获取摄像头的采集格式和参数 6 申请帧缓冲 内存映射 入队 xff08 1 xff0
  • C语言 多个文件同时使用一个全局变量

    在做嵌入式实验时 xff0c 需要在多个文件中修改同一个全局变量实现程序控制 xff0c 方式如下 xff1a 在某个头文件中声明全局变量 例 xff1a 文件名 xff1a status h span class token macro
  • Java实现简单赛事通知(大二水平)

    目录 前言 代码 总结 前言 实验目的与要求 了解接口与多态的应用场景 xff0c 熟练掌握接口的定义与实现类的编写 xff0c 了解面向对象的设计原则 xff0c 能够灵活应用接口 继承和组合构建更具弹性的软件架构 xff0c 初步体验面