- 博客(40)
- 收藏
- 关注
原创 网络编程v4pro--实现聊天室文件传输功能
聊天室v4是一个基于Java Socket的多人聊天系统,包含服务端,命令行客户端,GUI客户端和用户信息类。原版本功能只支持私聊和群聊文本和表情两种信息,但不支持发送文件。本pro版新增文件信息的收发功能。
2026-08-09 15:23:11
230
原创 网络编程v5--多人小球游戏基础
2.通过监听键盘的上下左右,转换成信息代码,并且用输出流(本质上是客户端套接字的输出流,在客户端类中有赋值)发送,服务端实时接收,用switch分支操控小球的移动方法(up,down等)2.监听函数:和之前版本不同的是,监听到新连接的时候,打包成ClientDO打包类新对象,同时在ClientDO类的构造方法中创建新小球对象,并将小球对象添加到小球数组中。1.总体上来说,这个版本的客户端类主要功能是绘制,一方面绘制客户端游戏界面,另一方面绘制界面中的小球。
2026-08-05 16:08:13
174
原创 网络编程v4--群聊和私聊的实现
v4版本进行了改进,将聊天方式细分为私聊和群聊,私聊情况下仅会话双方可见信息(这里以@用户 信息的信息作为私聊公式),所以以@作为区分聊天方式的主要特征,带有@的信息要进行解析并私发。1.先通过split函数,将receive函数返回的语句进行拆分,私聊分成三个部分(特征数字+好友名称+信息内容),群聊部分则分成两个部分(特征数字+信息)2.私聊模式下,先发送特征数字1,接着,由于需要规定用户名长度和消息长度,先获取用户名字符串部分和消息字符串部分。4.群聊模式下,先发送特征数字2,接着读取消息内容即可。
2026-07-29 14:52:55
192
原创 网络编程v3--聊天界面初步开发
v2版本实现了多用户端聊天的功能,但是仍然依赖控制台输入操作,这个版本更新了界面版的聊天模式,使聊天更加真实方便,同时,将用户和其用户名绑定成ClientUSer类,进一步完善了客户端聊天体验,实现“群聊”既视感。
2026-07-26 17:42:03
173
原创 网络编程v2--多客户端互通
由于一代版本仅支持客户端和服务端互通,暂时缺少客户端之间的沟通,所以在第二代版本中进行更新,二代版本中使用多实例实现多个客户端,并且支持某一客户端发的信息能被其他客户端接收,同时也能被服务端接收,下面做代码解释。6.函数5(主函数):包含初始化,在死循环中监听客户端发起的连接请求,并将新连接进的客户端加入sockets数组中。3.函数2(监听链接函数):返回值为向特定接口发起连接请求的客户端套接字,可用于获取该客户端的输入输出流。2.函数二(收信息函数):通过输入流的read函数实现。
2026-07-24 17:06:52
206
原创 初识网络编程--用户端和服务端传递信息
2.创建服务端的普通套接字,用serversocket.accept()返回一条代表和某一客户端的连接通道的socket。1.套接字对象创建格式(最常用):Socket socket=new Socket(“IP地址”,端口号)4. 根据读到的长度,创建对应大小的字节数组 byte[] buf = new byte[len];3.需要注意的是,在读取对方信息和发送信息的时候,均需要提前约定字数协议,目的是防止TCP粘包。(这里先创建对象,但不实例化,防止端口异常,用trycatch包围实例化部分)
2026-07-23 14:28:06
31
原创 计算机网络核心技术笔记:IP与HTTP基础
计算机网络的核心就是不同设备之间互相传数据。所有上网操作(刷网页、发消息、传文件)都依靠网络协议实现。IP协议(找到设备)、HTTP协议(传输网页数据)。IP协议:网络层协议,核心作用是设备寻址、规划传输路径,无连接、不可靠HTTP协议:应用层协议,核心作用是网页数据交互,无状态、明文传输层级关系:IP管“找对设备”,TCP管“稳定传输”,HTTP管“传对数据”正式环境优先使用HTTPS,保障数据传输安全。
2026-07-21 16:04:19
302
原创 java项目-流水线线程池
实现生产者生成任务,线程池A接受并且处理任务,接着传递给B,B处理过后给C,最终实现流水线处理效果。项目构成:一个主线程类Main,三个任务类TaskABC,一个任务处理底层逻辑类Task。核心在于任务在线程池BC中的传递,通过execute方法实现。这个类中定义了三个任务流水线的工序。任务处理线程+监听线程。
2026-05-23 17:19:09
34
原创 java--飞机大战游戏
目前版本的飞机大战游戏由五个类构成,分别是:GameUI类(主界面窗体类),Fighter类(敌我飞机类),GameListener类(键盘监听类), MainThread类(主线程类),Bullet类(子弹类)实现键盘监听器,用direction方向指示飞机走向,键盘按下时给direction相应的值,松开时direction重置为0。此类主要用于引入飞机大战中的形象,以及战机的生成,移动,攻击,被攻击判定,死亡判定等。[1]:创建己方战机对象,敌方战机数组,子弹数组,定义变量记录击杀数。
2026-04-04 16:37:57
77
原创 java--多线程综合以及实际应用
当多个线程访问一个对象时,如果不用考虑它们的执行时序,也不需要额外的同步,都能得到正确的结果,那么这个对象就是线程安全的。2.
2026-03-28 12:52:44
400
原创 java--线程安全问题
虽然在单线程下这不会有问题,但在多线程环境下,这种重排可能导致一个线程看到的操作顺序与代码编写的顺序不一致,从而引发错误。根据Java内存模型(JMM),每个线程都有自己的工作内存(类似于CPU缓存),保存了主内存中共享变量的副本。一个线程对变量的修改可能只更新到了自己的工作内存中,而没有及时刷新回主内存,导致其他线程无法看到最新的值。概念:Java线程安全问题,本质上是在多线程环境下,由于线程调度的不确定性,导致程序的执行结果与预期不符。// 具备可见性,当一个线程修改之后,另一个线程可以立马更新。
2026-02-05 10:32:46
348
原创 java项目--智能无人机平台v4
2.项目功能:新增任务类和任务处理线程类,通过鼠标监听器实现放置任务,并且无人机根据任务方位移动,直至完成任务(抵达并短暂停靠)1.通过传入的无人机数组和任务数组,遍历任务数组和无人机数组,通过比对得到离特定任务最近的无人机,并分配执行任务。isFoundedTask方法同理isFounded方法,取像素点判断是否为黑色,对任务进行扣血,状态改变。在CarryoutTask中,通过以无人机为原点建系,通过斜率调整无人机移动方向。1.项目结构:基本同于v3和v3p。【1】Task任务类。
2026-01-30 10:48:09
56
原创 java项目--智能无人机平台v3pro
【1】更新了isFound函数,新增返回值(返回值类型为Intruder)【2】在Drone类中添加goal变量,setgoal方法。项目介绍:再版本三的基础上,新增锁敌功能和攻击功能。
2026-01-27 21:08:24
182
原创 java项目--智能无人机(Drone)平台v3
3.项目思路:由于本质上无人机和入侵者的示意图都是由颜色组成的,如果两者在缓冲图像上相遇,存在覆盖,由于入侵者主体为黑色,我们可以获取无人机雷达范围内的像素点,取出其颜色,判断是否为极深的颜色(结合红绿蓝三色之和判断)2.项目结构:在无人机类(Drone)中,加入寻找方法isFound,并且在线程类中绘制完无人机和入侵者之后,开始检测。【1】在Drone类定义isFound方法,在无人机x,y坐标基础上,在雷达扫描范围内遍历,取出像素点,并判断颜色。
2026-01-27 10:16:58
162
原创 java项目--智能无人机(Drone)平台v2
【2】创建无人机数组和入侵者数组,用于存储生产的无人机和入侵者,并且将该数组赋值给DroneThread类和DroneListener类中的数组中,实现信息共享。在主界面添加红线,代表无人机的活动范围以及防御范围,无人机的生成只能在红线围成的矩形内部,入侵者只能在矩形围成的红线外生成。主要实现通过获取按钮上的文本,实现无人机和入侵者新对象的初始化,并将新对象添加到对应数组。将无人机和入侵者分别定义成一个类,在类内实现绘制和移动的两个方法;【2】遍历无人机和入侵者数组,取出对象,调用绘制和移动方法。
2026-01-25 10:39:02
222
原创 java数据结构学习--图
2.通过cityname,采用get函数获取对应的List,并创建Edge对象并赋值存入List;组成,非常适合用来模拟现实世界中的网络关系,比如地图上的城市与道路、社交网络中的好友关系等。1.项目介绍:利用哈希表制造一张城市图,显示每个城市周围可抵达的城市(以及票价)K表示Key(键),V表示Value(值),图的get函数采用键值对查找。2.项目结构:由两个类构成,分别是Edge类和MyCityGraph类。参数表中输入出发地(from),目的地(to),票价(w)【1】表的声明和初始化(哈希表)
2026-01-24 22:16:11
286
原创 java项目--智能无人机(Drone)平台v1
4.在方法体中,创建线程类实例对象,并将本类的画笔对象传递到DroneThread类(DroneThread类中在构造方法的参数表中传入画笔对象,并且进行赋值)项目v1功能简介:实现运行程序后,窗体出现显示有多个无人机以及雷达范围示意图的不断移动的无人机,抵达边界自动折返。[3]获取缓冲图像上的画笔,用白色,遮盖上一轮循环的图像,后续再重绘,实现“位移”效果。[7]改变x,y,x1,y1坐标(如果多个无人机,更改多个),同时设置边界速度取反。2.定义构造方法,创建画笔对象,并将画笔变量加入到参数表中。
2026-01-21 16:34:03
168
原创 java--线程的定义以及实现
线程:一个进程的组成部分,任何一个进程至少由一个线程组成,同时线程也是CPU分配执行任务的最小单元。3.启动线程:创建对象,调用start方法启动(调用start方法后,自动调用run方法)【2】实现接口Runnable(implements)多线程的优势:进程使用多线程的优势,在于可以共享数据。(JVM会自动调用run方法)【3】实现接口Callable(这里不做介绍)1.新建一个类,实现Runnable接口。1.新建一个类,继承Thread类。将任务对象作为参数传递给。创建上述类的实例对象。
2026-01-21 15:38:10
232
原创 java--背单词游戏(界面版)
2.功能介绍:运行程序,出现背单词游戏的初始界面,可以通过点击按钮组件,选择背单词的范围,然后面板刷新后,呈现随机单词,并随机挖空,用户可以在输入框中输入空缺的单词,点击“提交”后进行正误判断,点击“下一题”后进行下一轮出题。【4】处理“提交”按钮的功能,通过getText函数获取用户输入文本框中的字符串的首个字母,和挖空的字符进行比对,如果正确,利用JOptionPane实现弹窗告知,错误同理(后期考虑加入错题本功能,收集错误的单词)1.CETWordUI类中,定义showUI方法,实现组件初始化。
2026-01-19 15:44:30
422
原创 java项目---填词游戏CET4版本
提供了缓冲功能,可以提高读取文件的效率),采用BufferedReader的readline函数,可以大大提高读取文件的效率,一行一行读取。项目结构:声明一个CETWordDemo类,实现随机出现一个缺少一个字母的四级单词,在用户输入正确时提供单词的完整单词以及中文,如果输入错误则提示重新输入。1.与前面博客中的基础版一致,需要创建Scanner类和Random类的对象,用于扫描用户输入的字符和随机生成一个int(用于字符下标或者动态数组下标)String []=字符串.split("关键字符");
2025-12-11 15:19:38
349
原创 java项目--英文填词游戏
1.整体上采用嵌套循环,第一层循环用于随机选定单词以及其中挖空的字母,内层循环用于当用户键盘输入的字母错误时进行保留上次的问题进行再次输入。项目结构:实现一个WordDemo类,在主函数中实现随机挖空英文单词中的一个字母,利用scanner,通过键盘输入流将空缺补齐。3.创建Random类对象,以调用其方法,在字符串数组的长度内生成随机下标,实现随机选择字符串数组中的任一单词。4.同理,利用Random类中的nextInt方法随机索引,实现随机选择一个字母。
2025-12-09 13:32:31
162
原创 java文件管理系统新增功能---打开文件夹及文件
3.在动作监听器的方法体中,通过instanceof判断点击对象,如果是按钮,则获取动作指令也即按钮上目录的绝对路径,用字符串保存并用iniUI函数打开目录,呈现子文件;[2]打开文件操作:由于前面设置了JLabel的工具提示文本为JLabel包装的文件的绝对路径,所以核心操作在于获取jla上的工具提示文本,以及如何利用绝对路径打开文件。4.重点1:jbn按钮绝对路径的设置,由于按钮主要由动作监听器实现功能,所以将动作指令设置为绝对路径,方便获取jbn上的动作指令作为文件的pathway用于打开目录。
2025-11-27 14:54:57
468
原创 C语言题目--数列数组
3.第二难点在于,如果一旦出现了积大于10时,下一项(n)的结果便不再是(n-1)和(n-2)的积了,而是(n-3)和(n-2),解析到这一步,那么这题就可以开始代码实现了。2.难点在于,当两项积大于10时的处理,首先想到用数组的两个相邻元素分别存入结果的十位和个位,这个点用整除和取余就能解决;1.输入部分的a1,a2,实际上就是数组递推的首两项,数组递推规律本质上是第n 项前两项(n-1,n-2)的积。示数列的前两项 a1 和 a2 ,用一位数的乘法运算来生成数列 {an},规则为从 a1。
2025-11-20 21:10:45
329
原创 java--利用File类完成文件管理系统
Step5:监听到鼠标右键时,利用JPopupMenu类引入弹窗效果,并且将菜单栏的字符串存入字符数组,再利用JMenuItem类填充弹窗内容菜单。Step2:创建File[ ]数组,并且使用File类的listFile函数(功能:遍历目标路径,将每个子文件/子目录封装为File对象,存入数组返回)Step4:鼠标监听器方法实现--用getButton函数监听鼠标右键(左键1,中间2,右键3)Step4:主函数的引入,创建FileSystemUI类对象,调用showUI方法。
2025-11-18 17:46:17
351
原创 C语言qsort函数使用
4.比较函数的指针(函数名即函数指针)(即compare)根据上述规则可知:如果想得到降序排列只需要把返回值取即可;3.每个元素的字节大小(即sizeof(int))1.头文件的引用:qsort函数来自<stdlib.h>1.待排序的数组的首地址(即下方的arr)2.定义比较函数为qsort函数的参数需求做准备。◦ 返回 负数:第一个元素应排在第二个元素之前;◦ 返回 正数:第一个元素应排在第二个元素之后。2.数组元素的个数(即n)◦ 返回 0:两个元素相等;/*qsort函数的参数表。
2025-11-12 14:42:38
185
原创 C语言结构体--实现学生信息管理系统的基本功能
如果学生个数达到容量l,则需改变l的数值,并使用newstuList对stuList进行赋值(采用循环复制内部元素的方式),再改变stuList的地址和newstuList一致。【2】采用新建Student对象,并通过重新对新对象的信息赋值,再将新对象的信息传递给stuList的第(s+1)个元素,也即下标为s的元素。[1].返回值采用Student指针的形式,用于传回修改后的stuList。这里将打印内容的菜单定义为函数,便于在主函数的while循环中反复调用。add函数,用于添加学生。
2025-10-30 14:13:03
180
原创 C语言链表
2.接着,在主函数中创建新节点,使用<#stdlib.h>头文件中的malloc函数动态分配内存。在前面已创建好的节点的基础上,将每个节点按顺序链接(利用next指针),形成相连的结构。1.在主函数之前,头文件之后定义结构体,结构体内包括数据和指向下一个节点地址的指针。下面主要介绍节点的创建和链表的生成,以及基本的链表打印操作。3.向节点中存入数据。
2025-10-12 17:32:31
181
原创 C语言指针与链表
/ 指针类型的变量的值 不能直接赋给基本数据类型变量 类型不匹配。- 一个节点变量中需要包含两个变量: 其中一个变量用来存储值 ,另一个变量是一个指针变量,用来。地点: A地点 小明在A地点放了1kg黄金 ,小明将A地址的地址写在一张纸上(Z1) ,定义格式: 数据类型 *指针变量名= 某个变量的地址/一段内存的地址;// 将g变量存储数据的地址 存入了z1变量中。// 在函数的参数中,如果不是指针 或者数组,传递参数都是拷贝值。指针本身是一个数据类型 ,创建的变量可以存储其他变量的地址。
2025-10-04 14:37:13
279
原创 C语言洛谷题--蛇形数组
满足条件的当前位置右边相邻元素赋值为上一次循环增加的flag变量;接着将y的值从上一个元素调整为当前刚赋值完成的新元素,并且flag增大1,为下一次递增做准备。定义xy作为二位数组的坐标值,定义flag作为蛇形递增的变量。2.初始化数组,用遍历赋值让整个二维数组的元素为0,即未遍历态(可被填充和改写)。4.由于题目中生成n*n的矩阵,最大值显然为n*n,以此为主循环的结束判断标志。题干:输入不大于9的正整数n,生成一个如下图所示效果的蛇形数组。核心点:二维数组的循环和遍历。3.将数组的首个元素赋值为1.
2025-09-22 22:52:30
212
原创 java五子棋项目二之实现调整窗体后棋盘棋子的重绘
4.在MPanel类重写paint抽象方法,由于调整窗体会导致所有swing组件重新调用paint方法,实现棋盘重绘,遍历数组重绘棋子。【1】面向对象编程:由于数组需要存储多个且多种数据,我们将Chess定义为新的一个类,同时作为数组的类型创建数组。【1】将数组传递给MPanel类,便于其重写paint方法时可以利用棋子数据重新绘制棋子。【2】在接口类中获取棋子chessX,和chessY以及color的数据,存储到数组中。【3】调用MPanel类的paint方法(后续还需要对paint方法进行调整)
2025-09-12 13:59:34
295
原创 java五子棋项目一之棋盘绘制,落子以及胜负判断
【1】先前创建的二维数组中,未落子的坐标board值默认为0,为了防止单个交点多次落子的bug出现,加上if确保只能在空白处落子,定义黑子的board值为1,白棋的board值为2.【2】检查1(水平方向检查):利用for循环对水平落子点左右两个方向遍历,如遇不同色的棋子便使用break终止遍历,定义变量c存储落子两侧同色棋子的个数,返回值用于后续胜负判断。4.实现胜负判定,从水平,垂直,左下右上,右下左上四个方向检测是否五子连珠。【3】定义窗体方法GameUI,设置尺寸,标题,居中,终止,可见。
2025-09-11 20:06:16
370
原创 java类的继承
3.继承的性质:单继承(一个父类可有多个子类,每个子类只能有一个父类);多层继承(子类有父类,父类也可以有父类)public class 子类(派生类) extends 父类(基类/超类(super)){。4.子类的方法重写(覆盖):当父类中设计好的方法不能满足当前子类的需求。5.所有的类都默认继承Object类,即Object类是所有类的父类。1.继承的特点:子类会继承父类的属性和方法。2.//定义set方法设置属性(给属性赋值)条件:1.用于有继承关系的两个类之间。//定义get方法获取属性。
2025-09-09 22:34:34
223
原创 java画图工具的设计(鼠标监听器,鼠标移动监听器的使用)
【1】线段:只需在MouseListener的抽象方法中,在press中的作用域中利用getX()和getY()获取初始坐标,再于release的作用域中获取最终坐标,并且使用drawLine函数将得到的坐标数据相连接。难点在于在点击的同时包含按下,松开,点击三个指令,会重置x1,y1,x2,y2的坐标,使得三点重合无法连线,这里采用设置标记位的方法,即if判断语句。【3】等腰三角形:在矩形的基础上绘制等腰三角形,利用(x1,y2),(x2,y2),((x1+x2)/2,y1)三点连线。
2025-08-29 13:33:47
205
原创 java监听器的使用
【8】将用户输入的数据和原先定好的账号密码进行比对,利用if.....else....的逻辑用语,由于涉及到两个数据,用&&(并)连接。【4】为了调用Login类中jtf和pass文本框中用户输入的内容,需在ButtonListener类中创建两个同类型的数据(即JTextField类),便于调用。以安装在按钮上的动作监听器为例,将带有按钮组件的窗体和主函数的类叫做Login类;2.使用步骤:【1】事件源:当前动作所发生的组件(swing),这里主要以Button为例;Login类中传递的数据)
2025-08-22 18:14:22
414
原创 java图形化编程
由于后续setPreferredSize函数的源代码含有Dimension,在此步设置Dimension的像素点尺寸。由于JLabel在java swing中的便捷性,我们先建立对象调用JLabel,并将image添加在标签上。然后对标签的尺寸用事先设定好的ds设置,最后把jl标签加入jf窗体。接着利用JTextField将文本框引入,仍然采用Dimension进行尺寸设计,并将文本框加入窗体。1.首先是引入java标准库中的头文件,利用import函数达到此目的,对于该简单程序,只需用到此二头文件。
2025-08-21 11:35:57
202
原创 Java类与对象
定义格式:public+返回值类型(void--当前方法没有返回的数据)+方法名(参数类型 参数名,,){方法体.....}3.面向对象编程:根据需要用到的对象在Java中设计对应的类。4.在主函数中创建对象的格式:类名 对象名=new 类名()创建格式:访问修饰符(public)+数据类型 属性名。1.类:对具有相同特征(属性)和作用(方法)的对象的集合。2.对象:任何一个具体的事物或物体。5.//属性(变量):特征。6.//方法(函数):行为。
2025-08-19 15:40:59
104
原创 java笔记
5.数据类型:整型(int);浮点型(float/double);字符串(String)//“S”为大写。public class+类名(起名不能以数字开头;格式:pubic static void main(String[] args){}6.输出语句:print()/println()//加ln输出后换行。3.作用域:{........};7.for循环:格式:for(初始值;4.主函数:启动程序的地方(作为程序的入口)1.java的所有代码都是以类的形式存在。2.定义类的格式:class。
2025-08-17 15:54:00
202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅