1.java学习记录
1.方法的重载
重载换而言之其实就是函数名不变,但是其中的参数需要改变,可以三个方面改变(参数类型,参数顺序,参数个数这三个方面入手,这样可以运用的)
但是:注意访问修饰符或返回值设置不同,而参数设置相同时,无法构成方法的重载。
public class Test {
public Test(){
System.out.println("无参构造方法");
}
public Test(int a){
System.out.println("单参构造方法 a:"+a);
}
public Test(int a, String b){
System.out.println("无参构造方法 a:"+a +"b:"+b);
}
public static void main(String[] args) {
new Test();
new Test(1);
new Test(1,"1");
}
}
2.封装
4.1 什么是封装
当我们需要安全地访问对象时,例如限制给对象赋值的范围(避免数据类型的不同或者数据范围超出预计),我们就需要使用封装技术。
封装就是将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法(如set或者get)来实现对隐藏信息的操作和访问。
方法封装的主要优点包括:
代码抽象: 将复杂的操作和算法封装在方法中,使得调用者只需要关注方法的用途,而无需关心具体的实现细节。
隐藏实现细节: 封装隐藏了方法的具体实现,从而防止外部代码直接访问或修改内部逻辑,提高了信息隐藏和安全性。
提高可读性: 使用有意义的方法名和参数,使代码更易于理解和阅读,降低了理解和维护代码的难度。
提高可维护性: 修改方法的实现只需要在方法内部进行,不影响外部调用者的代码,从而减少了代码变更的影响范围。
代码重用: 封装的方法可以在不同的地方重复使用,避免了代码的重复编写,提高了代码的重用性。
用封装的方法,计算圆的面积
class Circle {
private double radius;
public Circle(double r) {
radius = r;
}
// 封装的方法,计算圆的面积
public double calculateArea() {
return Math.PI * radius * radius;
}
}
public class Main {
public static void main(String[] args) {
Circle circle = new Circle(5.0);
// 调用封装的方法,计算圆的面积
double area = circle.calculateArea();
System.out.println("Circle Area: " + area);
}
}
2.每日一题
最短路计数
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
long long dis[1000006];
int vis[1000005];
int head[1000005];
long long ans[1000005];
struct edge
{
int to;
int w;
int next;
}e[5000005];
struct node
{
int dis,pos;
bool operator <(const node &a)const
{
return a.dis>dis;
}
};
priority_queue <node> q;
void addedge(int x,int y,int z)
{
cnt++;
e[cnt].to=y;
e[cnt].w=z;
e[cnt].next=head[x];
head[x]=cnt;
};
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
dis[i]=0x3f3f3f3f;
dis[1]=0;
ans[1]=1;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
addedge(x,y,1);
addedge(y,x,1);
}
q.push((node){0-dis[1],1});
while(!q.empty())
{
node tmp=q.top();
q.pop();
int pos=tmp.pos;
int d=tmp.dis;
if(vis[pos]==1)
continue;
vis[pos]==1;
for(int i=head[pos];i!=0;i=e[i].next)
{
if(dis[e[i].to]>dis[pos]+e[i].w)
{
dis[e[i].to]=dis[pos]+e[i].w;
ans[e[i].to]=ans[pos];
q.push((node){0-dis[e[i].to],e[i].to});
}
else if(dis[e[i].to]==dis[pos]+e[i].w)
{
ans[e[i].to]+=ans[pos];
ans[e[i].to]%=100003;
}
}
}
for(int i=1;i<=n;i++)
{
printf("%lld\n",ans[i]);
}
return 0;
}