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