【C++写详细总结①】从for循环到算法初步

【C++写详细总结①】从for循环到算法初步
前言

本文通过小编自身学习的进程从而总结出本文,也希望大家可以好好学习,帮助到自己
这个是萌新考场救场代码,与本文一起食用更佳

for循环计数器

for(定义计数变量;定义结束条件;每次循环所做的动作) 
示例
for(int i=1;i<=10;i++) //首先定义“i”变量作为计数数组,赋初值为“1”//然后每次循环判断条件是否成立,不成立则退出//最后每循环执行条件,此示例为每循环“i”增加1

而计数器就是在for循环有了一定执行范围的基础上创建了一个数组,进行++计数

示例
#include<iostream>// 万年不变的框架usingnamespace std;intmain(){int n; cin>>n;//输入数值表示从1~n中有几个数字int cnt=0;//注意计数器赋初值建议为“0”//因为不赋值会野值(顾名思义会瞎生成一个值)for(int i=1;i<=n;i++){ cnt++;//cnt数组自增//cnt+=1;或cnt=cnt+1;效果同样。} cout<<cnt;//输出计数器}
练习题目1:

题目描述

斐波那契数列是一个特殊的数列:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55……

数列的第一项和第二项都是1,从第三项开始,每一项是其前面两项之和。
输入正整数 n ,编程输出该数列的第 n 项。

输入描述

一个整数 n 。

输出描述

一个整数,斐波那契数列的第 n 项。

#include<iostream>usingnamespace std;longlong a[55];intmain(){int n; cin>>n;//输入要求斐波那契数列的第几位 a[1]=1,a[2]=1;//把前两位设为1for(int i=3;i<=n;i++){ a[i]=a[i-1]+a[i-2];//把前两个元素相加变为第三个元素} cout<<a[n];//输出要求的元素位置return0;}
建议进阶练习:练习题目2

洛谷题目传送门

函数与模块化编程

#include<iostream>usingnamespace std;longlong a[55];//全局变量全局都可以使用//而主函数里的n只能在主函数内使用intfbnq(int n){ a[1]=1,a[2]=1;for(int i=3;i<=n;i++){ a[i]=a[i-1]+a[i-2];//公式还是那样,但是变成函数内部了}return a[n];//函数需要返回值哦(void函数除外)//没有返回值函数再怎么写也没用哦}intmain(){int n; cin>>n; cout<<fbnq(n);//记得上面定义时括号里写东西了//这里就也要写东西return0;}
各种函数特点与用法
函数类型特点用法
int返回值为int类型int 函数名(int 新创建变量的名称)
long long返回值为long long 类型long long 函数名(long long 新创建变量的名称)
bool返回值类型为bool,即不是true就是falsebool 函数名 (bool 新创建的变量名称
void无返回值,函数内不要有reutrn,若有,请注意很有可能报错,强制停止此函数运行请写"return;"void 函数名 (int 新创建的变量名)

小提示:类型 函数名(int/long long/bool/其他类型 新创建的变量名)输入变量名的类型void是不合法的!若使用了会报错

练习题目1:

学而思网校提供:

在这里插入图片描述


在这里插入图片描述
#include<cstdio>#include<cmath>usingnamespace std;//定义函数intexpress(double w)//定义输入数据{//以下是本题核心代码int money; w=round(w*10)/10;if(w<=1){ money=13;}else{ w=ceil((w-1)/0.5); money=13+w;}return money;//输出花费}intmain(){double w;scanf("%lf",&w);printf("%d\n",express(w));//直接套用函数输出值输出return0;}

建议:可以再洛谷上寻找一些简单题目专门用函数来写,进行练习。

多重循环(for循环plus版)

模板:

for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){//此模板还可以不断叠层//这段模板内出现的所有变量名均可替换:i,j,n}}

闲话不多说,直接上题目

练习题目1:

洛谷USACO题目饲料调配

在这里插入图片描述
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usingnamespace std;typedeflonglong LL;intmain(){int a,b,c;//输入数据 cin>>a>>b>>c;int a1,b1,c1; cin>>a1>>b1>>c1;int a2,b2,c2; cin>>a2>>b2>>c2;int a3,b3,c3; cin>>a3>>b3>>c3;for(int i=0;i<100;i++)//使用三重for循环{for(int j=0;j<100;j++)//以后做其他题使用三重for循环须慎重(可能会超时){for(int k=0;k<100;k++){if(!i&&!j&&!k){continue;}int x=a1*i+a2*j+a3*k;//进行题目内要求的计算int y=b1*i+b2*j+b3*k;int z=c1*i+c2*j+c3*k;if(x*b==y*a&&y*c==b*z&&x%a==0){ cout<<i<<" "<<j<<" "<<k<<" "<<x/a<<endl;return0;//输出答案结束程序}}}} cout<<"NONE";//若前方未结束程序输出无正解return0;}
练习题目2:

感谢大自然的馈赠

在这里插入图片描述


可以自己之后去练习

while循环

//while循环本质逻辑与for循环大差不差,所以小编就不在这里过多废话了while(true)//每次循环判断此条件是否成立,成立即继续运行,不成立则反之{ cout<<"作者真帅";}
练习题目1:
在这里插入图片描述
练习题目2:
题目描述

数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。
比如,对于 24 来说,把 2 和 4 相加得到 6,由于 6 是一位数,因此 6 是 24 的数根。再比如 39,把 3 和 9 加起来得到 12,由于 12 不是一位数,因此还得把 1 和 2 加起来,最后得到 3,这是一个一位数,因此 3 是 39 的数根。

输入描述

一个整数n,(1 <= n <= 10^9)

输出描述

一个数字,即n的数根

样例1
输入

39

输出

3

结构体

C++结构体的基本概念

在C++中,结构体得到了极大的增强,几乎和类一样强大,唯一区别是默认访问权限为public(类为private)。

#include<iostream>#include<string>usingnamespace std;// C++结构体定义structStudent{ string name;// C++中可以直接使用stringint age;float score;};intmain(){// 创建结构体变量 Student stu1;// C++中不需要写struct关键字 stu1.name ="张三"; stu1.age =20; stu1.score =85.5; cout <<"姓名:"<< stu1.name << endl; cout <<"年龄:"<< stu1.age << endl; cout <<"成绩:"<< stu1.score << endl;return0;}
结构体的定义方式
基本定义
#include<iostream>#include<string>usingnamespace std;// 方式1:普通定义structPerson{ string name;int age; string phone;};// 方式2:定义时创建对象structCar{ string brand; string model;int year;} car1, car2;// 全局对象intmain(){// 方式3:使用typedef(C++中不太需要)typedefstruct{ string city; string street;int number;} Address; Address addr ={"北京","长安街",1}; Person p;// 直接使用,不需要struct关键字 Car myCar;// 局部对象return0;}
结构体的初始化
多种初始化方法
#include<iostream>#include<string>usingnamespace std;structStudent{ string name;int age;float score;};intmain(){// 方法1:聚合初始化(C++11起) Student stu1 ={"张三",20,85.5};// 方法2:指定成员初始化(C++11起) Student stu2 ={.name ="李四",.age =21,.score =92.0};// 方法3:使用构造函数(结构体可以有构造函数) Student stu3("王五",22,88.5);// 如果有构造函数的话// 方法4:默认初始化 Student stu4{};// name为空,age=0,score=0// 方法5:逐个赋值 Student stu5; stu5.name ="赵六"; stu5.age =23; stu5.score =90.5;// 输出验证 cout << stu1.name <<" "<< stu1.age <<" "<< stu1.score << endl; cout << stu4.name <<" "<< stu4.age <<" "<< stu4.score << endl;// 0 0return0;}
结构体成员访问
#include<iostream>#include<string>usingnamespace std;structPoint{int x;int y;// 成员函数voiddisplay(){ cout <<"Point("<< x <<", "<< y <<")"<< endl;}// 计算到原点的距离doubledistance(){returnsqrt(x*x + y*y);}};intmain(){ Point p1 ={3,4};// 直接访问 cout <<"x = "<< p1.x <<", y = "<< p1.y << endl;// 调用成员函数 p1.display(); cout <<"到原点的距离:"<< p1.distance()<< endl;// 指针访问 Point *ptr =&p1; ptr->x =5; ptr->y =12; cout <<"修改后:"; ptr->display();return0;}
结构体数组
#include<iostream>#include<string>#include<iomanip>usingnamespace std;structStudent{ string name;int age;float score;};intmain(){// 定义并初始化结构体数组 Student class1[3]={{"张三",20,85.5},{"李四",21,92.0},{"王五",22,88.5}}; cout <<"班级学生信息:"<< endl; cout <<setw(10)<<"姓名"<<setw(6)<<"年龄"<<setw(8)<<"成绩"<< endl; cout <<"------------------------"<< endl;// 遍历数组for(int i =0; i <3; i++){ cout <<setw(10)<< class1[i].name <<setw(6)<< class1[i].age <<setw(8)<< fixed <<setprecision(1)<< class1[i].score << endl;}// 动态分配结构体数组 Student* class2 =new Student[2]; class2[0]={"赵六",19,78.5}; class2[1]={"孙七",20,95.0};delete[] class2;// 释放内存return0;}
结构体嵌套
#include<iostream>#include<string>usingnamespace std;// 地址结构体structAddress{ string city; string street;int number;voidshow(){ cout << city <<" "<< street <<" "<< number <<"号";}};// 联系方式结构体structContact{ string phone; string email;};// 学生结构体嵌套其他结构体structStudent{ string name;int age; Address addr;// 嵌套Address Contact contact;// 嵌套ContactvoidshowInfo(){ cout <<"姓名:"<< name << endl; cout <<"年龄:"<< age << endl; cout <<"地址:"; addr.show(); cout <<"\n电话:"<< contact.phone << endl; cout <<"邮箱:"<< contact.email << endl;}};intmain(){ Student stu ={"张三",20,{"北京","长安街",1},{"13800138000","[email protected]"}}; stu.showInfo();// 访问嵌套成员 cout <<"\n城市:"<< stu.addr.city << endl; cout <<"电话:"<< stu.contact.phone << endl;return0;}
结构体与函数
#include<iostream>#include<string>usingnamespace std;structRectangle{double width;double height;doublearea(){return width * height;}};// 值传递voidprintRect1(Rectangle r){ cout <<"宽:"<< r.width <<",高:"<< r.height <<",面积:"<< r.area()<< endl;}// 引用传递(避免复制)voidprintRect2(const Rectangle &r){ cout <<"宽:"<< r.width <<",高:"<< r.height <<",面积:"<< r.area()<< endl;}// 指针传递voidmodifyRect(Rectangle *r,double w,double h){ r->width = w; r->height = h;}// 返回结构体 Rectangle createRect(double w,double h){return{w, h};// C++11的统一初始化}intmain(){ Rectangle r1 ={10,5};printRect1(r1);// 值传递printRect2(r1);// 引用传递modifyRect(&r1,20,10); cout <<"修改后:";printRect2(r1); Rectangle r2 =createRect(15,8); cout <<"新矩形:";printRect2(r2);return0;}
结构体与运算符重载
#include<iostream>usingnamespace std;structVector2{float x, y;// 构造函数Vector2(float x =0,float y =0):x(x),y(y){}// 运算符重载 Vector2 operator+(const Vector2& other)const{returnVector2(x + other.x, y + other.y);} Vector2 operator*(float scalar)const{returnVector2(x * scalar, y * scalar);}// 友元函数重载<<运算符friend ostream&operator<<(ostream& os,const Vector2& v){ os <<"("<< v.x <<", "<< v.y <<")";return os;}};intmain(){ Vector2 v1(3,4); Vector2 v2(1,2); Vector2 v3 = v1 + v2; Vector2 v4 = v1 *2; cout <<"v1 = "<< v1 << endl; cout <<"v2 = "<< v2 << endl; cout <<"v1 + v2 = "<< v3 << endl; cout <<"v1 * 2 = "<< v4 << endl;return0;}
结构体与动态内存
#include<iostream>#include<string>usingnamespace std;structNode{int data; Node* next;// 自引用结构体(链表节点)Node(int val):data(val),next(nullptr){}};structDynamicArray{int* arr;int size;DynamicArray(int n):size(n){ arr =newint[size];for(int i =0; i < size; i++){ arr[i]= i *10;}}~DynamicArray(){delete[] arr; cout <<"内存已释放"<< endl;}voiddisplay(){for(int i =0; i < size; i++){ cout << arr[i]<<" ";} cout << endl;}};intmain(){// 链表示例 Node* head =newNode(1); head->next =newNode(2); head->next->next =newNode(3);// 遍历链表 Node* current = head;while(current){ cout << current->data <<" "; current = current->next;} cout << endl;// 释放链表内存while(head){ Node* temp = head; head = head->next;delete temp;}// 动态数组结构体 DynamicArray da(5); da.display();// da的析构函数会自动释放内存return0;}
结构体 vs 类的对比
#include<iostream>usingnamespace std;// 结构体 - 默认publicstructMyStruct{int a;// 默认publicvoidfunc(){// 默认public cout <<"Struct function"<< endl;}};// 类 - 默认privateclassMyClass{int a;// 默认privatepublic:voidfunc(){ cout <<"Class function"<< endl;}};// 实际使用中,结构体常用于:// 1. 简单的数据容器// 2. 与C语言兼容的代码// 3. 不需要封装和继承的简单对象structPoint{int x, y;};// 类用于:// 1. 复杂的对象// 2. 需要封装和继承// 3. 有复杂的成员函数classShape{private: Point center;public:virtualvoiddraw()=0;};intmain(){ MyStruct s; s.a =10;// 可以直接访问 s.func(); MyClass c;// c.a = 10; // 错误!私有成员 c.func();// 公有成员函数return0;}
实用示例:学生成绩管理系统
#include<iostream>#include<string>#include<vector>#include<algorithm>usingnamespace std;// 学生结构体structStudent{ string id; string name;int age;double score;// 构造函数Student(string id, string name,int age,double score):id(id),name(name),age(age),score(score){}// 显示学生信息voiddisplay()const{ cout <<"学号:"<< id <<",姓名:"<< name <<",年龄:"<< age <<",成绩:"<< score << endl;}};// 班级结构体structClass{ string className; vector<Student> students;voidaddStudent(const Student& stu){ students.push_back(stu);}voidshowAll(){ cout <<"\n=== "<< className <<" 学生列表 ==="<< endl;for(constauto& stu : students){ stu.display();}}doublegetAverageScore(){if(students.empty())return0;double sum =0;for(constauto& stu : students){ sum += stu.score;}return sum / students.size();}voidsortByScore(){sort(students.begin(), students.end(),[](const Student& a,const Student& b){return a.score > b.score;});}};intmain(){ Class c1 ={"计算机1班"};// 添加学生 c1.addStudent({"2024001","张三",20,85.5}); c1.addStudent({"2024002","李四",21,92.0}); c1.addStudent({"2024003","王五",20,78.5}); c1.addStudent({"2024004","赵六",22,95.0});// 显示所有学生 c1.showAll();// 计算平均分 cout <<"\n班级平均分:"<< c1.getAverageScore()<< endl;// 按成绩排序 c1.sortByScore(); cout <<"\n=== 按成绩排序后 ==="; c1.showAll();return0;}

ASCLL码

ASCLL码就像一个字符的身份证,每一个字符都有一个数字来代表,而怎么判断一个字符的“身份证”是多少呢,请看下面示例

#include<iostream>usingnamespace std;intmain(){char s='A';//必须要char类型的int a=s;//用int来转换字符,变为数字 cout<<a;//最后输出转换好的数字return0;}

有一个小提示,字符A-Z是挨在一起的,所以我们知道了A的身份证是65,就可以推出B的字符是66,以此类推,注意,小写字符和大写字符不是挨在一起的,所以需要记好“a”的身份证是97。

以下是我在菜鸟教程里搜索到的ASCLL码表

在这里插入图片描述


推荐大家可以使用菜鸟教程这个网站

string类型

不知道大家是否学过python的字符串,在python中,字符串是可以像数组那样进行下表操作的。而不幸的是,C++中正常的char类型字符串无法进行下表操作,而string类型可以。不过请注意,string类型没有负索引这个东西:


练习题目1:

题目描述
有 N 只史莱姆排成一排,每只的颜色用一个英文小写字母表示,所有史莱姆的颜色排列成一个字符串 S。
接下来同样颜色的史莱姆会融合成一只,直到所有相邻的史莱姆颜色都不同。问最后剩下几只史莱姆?

输入格式
第1行,1个正整数 N
第2行,字符串 S ,表示每只史莱姆的颜色

输出格式
输出最后剩下史莱姆的数量

输入样例#1
10
aabbbbaaca

输出样例#1
5

#include<iostream>usingnamespace std;intmain(){int n; cin >> n; string s; cin >> s;int count =1;//计数器for(int i =1; i < n; i++){if(s[i]!= s[i-1])//判断有几只不同的史莱姆(因为如果有不同的就不会计数){ count++;}} cout << count << endl;return0;}

string 字符串操作

string字符串边界代码表格:

在这里插入图片描述
字符串拼接:

两个字符串是可以像加法一般拼在一起的,请看示例:

string s="作者"; string n="真帅"; string m=s+n; cout<<m;

运行这段代码后终端会显示出“作者真帅这四个字”

在这里插入图片描述
练习题目1:

洛谷-贪婪的送礼者

在这里插入图片描述


以下是AC代码,可以用来做对拍

#include<bits/stdc++.h>//万能头文件,十分好用,建议背下来usingnamespace std; map<string,int>money;int n,l,have; string name[105],x,buddy;intmain(){ cin>>n;for(int i=1;i<=n;i++) cin>>name[i];for(int i=1;i<=n;i++){ cin>>x>>have>>l;if(l==0)continue; money[x]-=have;int give=floor(have/l); money[x]+=(have-l*give);for(int i=1;i<=l;i++){ cin>>buddy; money[buddy]+=give;}}for(int i=1;i<=n;i++) cout<<name[i]<<" "<<money[name[i]]<<endl;return0;}

递归初步

1.1 递归的含义与历史

递归是计算机科学的一个不可分割的算法。就像西方不能失去耶路撒冷一样 递归指的是一个函数直接或间接读取自己的过程。但在我们使用递归的时候要注意不要写成死循环,并且我们也要明确我们写这个递归的目的,要逐步地把问题缩小化

1.2 举个栗子

递归死循环:

在小明小的时候听过这样的一个故事:从前有座山,山中有座庙,庙里有个老和尚,老和尚在讲故事,讲的是什么呀?从前有座山,山中有座庙,庙里有个老和尚在讲故事……

像这样的故事没有丝毫特点,就像你写死循环的时候重复给机器讲一个“故事”,机器就会困得睡着了,因此就“睡着了”。

1.3 代码示例

intdg(int n){if(n==87)//结束条件{return1;}returndg(n+1);//引用时n+1}

练习题目1:
在这里插入图片描述


此题为欧几里得公式递归写法,AC代码如下:

#include<bits/stdc++.h>usingnamespace std;intgcd(int a,int b){if(a%b==0){return b;}else{returngcd(b,a%b);//欧几里得算法公式}}intmain(){int a, b; cin >> a >> b; cout <<gcd(a, b);//其实万能头下__gcd(a,b)可以直接出答案return0;}
拔高题目1:
在这里插入图片描述


这道题难度较高,使用了我们还未学到的回溯算法,可以自己深研以下
AC代码:

#include<iostream>usingnamespace std;int n,m,p[15],ans;bool vis[15];voiddfs(int step){if(step==n+1){int sum=0;for(int i=1;i<=n;i++){if(vis[i]==1){ sum+=p[i];}}if(sum==m){ ans++;}return;} vis[step]=1;dfs(step+1); vis[step]=0;dfs(step+1);}intmain(){ cin>>n>>m;for(int i=1;i<=n;i++){ cin>>p[i];}dfs(1); cout<<ans<<endl;return0;}

回溯法

1.1 前言

在上一个知识点递归初步里的拔高题目AC代码使用了回溯法,在这个知识点部分我们来学习回溯法。

1.1.1 什么是回溯法?
小明:老师,回溯法是啥捏,是时空大回溯吗。
老师:对也不完全对,回溯指的是在做题时一种试错过程中不可缺少的部分。比如说……
小明:老师!也就是说回溯就是一种不撞南墙不回头的做法呗。
老师:对了,我们如果发现一种路线不可行,那么我们立即使用下一条路线,而回到原来选择的那个分支的方法,我们称为回溯法,或者说这也是种枚举的过程
1.1.2 回溯法有什么用呢

有人说,回溯法的底层逻辑就是递归,有回溯的地方就有递归。而回溯在做背包一类的题目中有显著优势,背包这个东西我们后文会提到。

2.回溯模板

这是一道全排列枚举题目:

在这里插入图片描述


AC代码

#include<cstdio>#include<cstring>#include<iostream>usingnamespace std;bool vis[10];int plan[10];int n;voiddfs(int step){if(step==n+1){for(int i=1;i<=n;i++){ cout<<plan[i]<<" ";} cout<<endl;return;}for(int i=1;i<=n;i++){if(vis[i]==1){continue;} plan[step]=i;//回溯核心部分 vis[i]=1;dfs(step+1);//调用自己,递归操作 vis[i]=0;}}intmain(){ cin>>n;dfs(1);return0;}

高精度算法

1.加法

1.1 前言

在大家的小学时期怎样计算两个数相加呢,想必有的人会使用竖式的方法,而高精度就是来模拟竖式加法,如下图所示:

在这里插入图片描述
1.2 代码逻辑

我们知道了高精度加法的具体逻辑,就是模拟人类计算多位数加多位数时使用的竖式计算方式,而在加的时候就会出现多一位的情况,比如:

在这里插入图片描述


有时我们就会出现这种尴尬的方式,数组下表0的那个部分给到了数字9,而多的那一位就没有地方了。也许有的人会说,那把9的下表设为1不就行了,但是有时数位不会多出来一位,若是这样的话有时输出就会出现前导0,所以,我们就要请出这个方法了——逆序存储。因为这样的话若是没有多出来的那一位就不会出现前导0了,因为逆序输出的时候记好是否有多出来的那一位就可以了。

1.3 逆序存储代码:
voidadd(string s,int a[]){ a[0]= s.size();for(int i =1; i <= a[0]; i++) a[i]= s[a[0]-i]-'0';}
1.4 核心代码

在我们加法运算的过程中,一定会出现进位的情况,而我们就要推出进位变量carry,核心代码实现如下:

voidaddBIG(int a[],int b[],int c[]){ c[0]=max(a[0], b[0]);int carry =0;//进位函数for(int i =1; i <= c[0]; i++){int t = a[i]+ b[i]+ carry;//两位相加并加上前一位的进位数 c[i]= t %10;//存入数组 carry = t /10;//计算下一位进位数值}if(u >0){ c[++c[0]]= carry;}}
1.5 输出

最后一步也是最重要的一步——逆序输出。因为我们前文说到是逆序存入,so我们要逆序输出,这样才能输出正确。

1.6 整体代码
#include<iostream>#include<cstdio>#include<algorithm>usingnamespace std;voids2BIG(string s,int a[]){ a[0]= s.size();for(int i =1; i <= a[0]; i++) a[i]= s[a[0]-i]-'0';}voidprintBIG(int a[]){for(int i = a[0]; i >=1; i--) cout << a[i]; cout << endl;}voidaddBIG(int a[],int b[],int c[]){ c[0]=max(a[0], b[0]);int u =0;for(int i =1; i <= c[0]; i++){int t = a[i]+ b[i]+ u; c[i]= t %10; u = t /10;}if(u >0){ c[++c[0]]= u;}}int a[1000005], b[100005], c[100005]; string sa, sb;intmain(){ cin >> sa >> sb;s2BIG(sa, a);s2BIG(sb, b);addBIG(a, b, c);printBIG(c);return0;}

2.高精度减法

正在更新中……

Read more

Java 接口:从‘空架子’到‘万能遥控器’

🚀Java接口通关秘籍:从“空架子”到“万能遥控器”的逆袭! 发布时间:2026-01-09 专栏:Java基础通关指南 😮 先唠个嗑:为啥接口总被新手“嫌弃”? 刚学Java的小伙伴大概率都有这感受:“接口这玩意儿啥也干不了,就一堆空方法,写了半天还得靠实现类干活,纯纯的‘空架子’?” NONONO!今天咱就把Java接口的底裤扒干净——它不是“空架子”,而是编程界的“万能遥控器”:定义好了按钮(方法),不管是电视、空调还是投影仪(实现类),只要按规矩接这个遥控器,就能按统一的方式干活! 📚 一、啥是Java接口?(人话版解释) 1. 官方定义(快速略过) 接口(Interface)是Java中的一种引用类型,是方法的集合,只能包含常量、抽象方法(Java 8前),以及默认方法、静态方法、私有方法(Java

By Ne0inhk
Java 大视界 -- Java 大数据平台迁移与升级策略:平滑过渡的方法(十四)

Java 大视界 -- Java 大数据平台迁移与升级策略:平滑过渡的方法(十四)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的博客,正是这样一个温暖美好的所在。在这里,你们不仅能够收获既富有趣味又极为实用的内容知识,还可以毫无拘束地畅所欲言,尽情分享自己独特的见解。我真诚地期待着你们的到来,愿我们能在这片小小的天地里共同成长,共同进步。💖💖💖 本博客的精华专栏: 1. 大数据新视界专栏系列:聚焦大数据,展技术应用,推动进步拓展新视野。 2. Java 大视界专栏系列(NEW):聚焦 Java 编程,涵盖基础到高级,展示多领域应用,含性能优化等,助您拓宽视野提能力 。 3. Java 大厂面试专栏系列:提供大厂面试的相关技巧和经验,助力求职。 4. Python 魅力之旅:探索数据与智能的奥秘专栏系列:走进 Python 的精彩天地,感受数据处理与智能应用的独特魅力。 5. Java

By Ne0inhk
计算机毕业设计springboot博物馆藏品管理系统 基于Java的博物馆文物数字化保管平台 智慧博物馆馆藏资源信息管理系统

计算机毕业设计springboot博物馆藏品管理系统 基于Java的博物馆文物数字化保管平台 智慧博物馆馆藏资源信息管理系统

计算机毕业设计springboot博物馆藏品管理系统9cqv9q2e(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 博物馆作为文化遗产的核心守护者,承担着收藏、研究、展示和教育等多重使命。随着馆藏数量持续增长与品类日益繁杂,传统手工记录与物理存储模式已难以满足现代管理对效率、精准度及便捷性的硬性需求。与此同时,公众文化服务需求不断升级,观众不仅期待获取详尽的文物信息,更渴望通过数字化互动深度参与文化体验。在此背景下,利用现代信息技术重构博物馆管理流程,推动藏品管理从纸质化向数字化转型,已成为提升管理科学性、优化公共服务能力的必然选择。 本系统采用SpringBoot框架与Vue.js技术构建,遵循B/S架构设计,通过MySQL数据库实现数据持久化。系统功能模块覆盖博物馆日常运营与公众服务的全流程业务场景:在基础数据管理方面,实现博物馆简介信息(场馆名称、地址、规模、负责人、联系方式、开放时间、发展历程及展示图片)的维护;在核心藏品管理方面,涵盖藏品展览与精品典藏两大子系统,支持藏品基础信息(名称、类型、年代

By Ne0inhk
Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

目录 前言 集合类 ArrayList 1. 创建和初始化 ArrayList 2.添加元素  add 3.获取元素 get 4.删除元素 remove 5.检查元素  6.遍历 ArrayList LinkedList Stack 1. 创建Stack对象 2. 压入元素 (push)   3. 弹出元素 (pop)  4. 查看栈顶元素 (peek)  5. 检查栈是否为空 (empty) Queue 1. 创建队列对象 2. 添加元素 (add 和 offer)   3. 移除元素 (poll 和 remove)

By Ne0inhk