JAVA复习之三

本文深入探讨Java设计模式,包括单例模式的实现及应用,抽象模板模式的正确位置,以及多态在Dog、Cat、Monkey继承Pet类中的表现。同时,讲解了矩阵运算、Random类的使用、字符串处理技巧、重写与重载的区别,以及输入流和输出流的子类介绍。

1、设计模式:单态设计模式

为了控制创建对象的个数,需要收回创建对象的权利,下面想办法设置Teacher为内存中唯一对象,在Text中创建并使用Teacher;

Teacher类中

public class Teacher 
{
	private static Teacher t;
	private Teacher()
	{
		
	}
	public static Teacher getTeacher()
	{
		if(t==null) t=new Teacher();
		return t;
	}
}

Text中

public class Text 
{
	public static void main(String[] args) 
	{
		Teacher t1=Teacher.getTeacher();
		Teacher t2=Teacher.getTeacher();
		if(t1==t2)
			System.out.println("same");
	}
}

2、设计模板(注意abstract的位置)

      


3、使用多态,设计一个物体的不同表现方式

让Dog、Cat、Monkey继承于Pet,然后通过对cry的重写,实现不同的操作

使用new为数组分配空间的时候,每个位置上的都是引用,而不是对象,还需通过后续赋值不断给每个位置生成一个新的对象


4、矩阵相乘

public Matrix multiply(Matrix b)
{
	if(b.row!=col)
	{
		System.out.println("Wrong");
		return null;//这里的return值要注意了;
	}
	else
	{
		Matrix t=new Matrix(row,b.col);
		for(int i=0;i<row;i++)
		{
			for(int j=0;j<b.col;j++)
			{
				t.m[i][j]=0;
				for(int k=0;k<col;k++)
				{
					t.m[i][j]+=m[i][k]*b.m[k][j];
				}
			}
		}
		return t;
	}
}

5、矩阵转置

public Matrix transpose()
{
	Matrix t=new Matrix(row,col);
	for(int i=0;i<col;i++)
	{
		for(int j=0;j<row;j++)
		{
			t.m[i][j]=m[j][i];
		}
	}
	return t;
}

6、Random的使用

Random ra=new Random();
int rai=ra.nextInt(n);//生成随机数;

Random对象的生成

Random类包含两个构造方法   

(1)使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象。

public Random()

(2)通过制定一个种子数进行创建。 

public Random(long seed)

(3)示例代码:

Random r = new Random();
Random r1 = new Random(10);

种子数只是随机算法的起源数字,和生成的随机数字的区间无关。


Random类中的常用方法

Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率是均等的。

public boolean nextBoolean()
作用是生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率。
public double nextDouble()
该方法的作用是生成一个随机的double值,数值介于[0,1.0)之间。
public int nextInt()
该方法的作用是生成一个随机的int值,该值介于int的区间,也就是-231到231-1之间。如果需要生成指定区间的int值,则需要进行一定的数学变换,具体可以参看下面的使用示例中的代码。
public int nextInt(int n)
该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。
public void setSeed(long seed)
该方法的作用是重新设置Random对象中的种子数。设置完种子数以后的Random对象和相同种子数使用new关键字创建出的Random对象相同。

Random类使用示例

(1)生成任意小数

double d1 = r.nextDouble();//生成[0,1.0)区间的小数
double d2 = r.nextDouble() * 5;//生成[0,5.0)区间的小数
double d3 = r.nextDouble() * 1.5 + 1;//如果没有后面的+1,就是[0,1.5),但是有+1,则范围是[1,2.5)
  • 生成[0,d)区间的随机小数,d为任意正的小数,则只需要将nextDouble方法的返回值乘以d即可。
  • 生成任意非从0开始的小数区间[d1,d2)范围的随机数字(其中d1不等于0),则只需要首先生成[0,d2-d1)区间的随机数字,然后将生成的随机数字区间加上d1即可。

(2)生成任意整数

int n1 = r.nextInt();//生成[-231,231)区间的整数
int n2 = r.nextInt(10);//生成[0,10)区间的整数
n2 = Math.abs(r.nextInt() % 10);//生成[0,10)区间的整数

(3)生成(-n,n)之间的整数

int n2 = r.nextInt() % n;

7、java中next()和nextLine()方法的区别

  • next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符,next()方法不能得到带空格的字符串。也就是说,当读取到有效字符的时候,next()方法会将其后输入的空格键、Tab键或Enter键当成结束符。
  • nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串。nextLine()方法会读取改行从前到的所有的内容,包括换行符,然后把焦点移动到下一行的开头,停止读入。

8、如何能保证是重写而不是重载呢?

通过@Override

@Override
public String toString()
{
	return "编号为"+this.getNo()+"、姓名为"+this.getName()+"、年龄为"+this.getAge()+"的"+this.getSeminary()+"学院老师";
}

9、System.in也是InputStream类型的

(1)InputStream的子类
直接子类有:FileInputStream, ObjectInputStream,System.in
间接子类有:BufferedInputStream(FileInputStream),DataInputStream(FileInputStream)

(2)Reader的子类
直接子类有:BufferedReader, InputStreamReader
间接子类有:FileReader(InputStreamReader)

(3)OutputStream的子类
直接子类有:ObjectOutputStream
间接子类有: DataOutputStream,FileOutputStream

(4)Writer的子类
直接子类有:BufferedWriter, OutputStreamWriter
间接子类有: FileWriter, PrintWriter


10、split

String test="no pains,no gains!";
String []a=test.split(" |,|!");//以空格、逗号和叹号作为分隔符;


11、实验三:字符串回文

https://blog.csdn.net/fighting123678/article/details/83713297

 

三维建模技术借助先进的图像处理手段,将二维影像转化为立体空间数据。在多种实现路径中,双摄像头视觉方案与编码光投影技术具有代表性。前者通过布置两个成像单元从不同方位采集画面,依据视差原理与空间几何关系推算深度数据;后者则向目标表面投射特定光栅,通过解析光栅形变反推三维轮廓。相位偏移法作为光栅技术的重要分支,采用多步渐进式光场调制策略,通过记录连续相位变化获取亚像素级三维信息。同步采用的互补二进制编码机制,通过优化光强分布模式有效解决相位跳变问题,显著提升重建数据的连续性。 成像系统的参数标定是三维数据生成的基础环节,需通过专用算法确定镜头焦距、像主点坐标及光学畸变系数等核心参数。立体校正则依据双相机空间几何关系,对采集图像进行投影变换,使对应像点分布于同一水平扫描线上,大幅降低立体匹配复杂度。在光栅系统中,相位对齐技术通过建立像素级相位映射关系,将二维相位场转换为三维坐标;而在立体视觉中,视差分析通过比对双视图对应像素偏移量,构建深度映射矩阵。最终通过点云融合算法,将离散空间坐标整合为连续曲面模型,该技术体系在工业检测、数字娱乐及沉浸式交互等领域具有重要应用价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值