Java知识点3
Java中的随机函数有两种:
1,java.lang.Math.random():Math.random()方法中返回一个0–1之间的随机double型数据
2,java.until.Random() 构造一个无参的随机数生成器,使用系统时间的毫秒为
默认的种子,其方法有
1,boolean nextBoolean():Random.nextBoolean()返回下一个伪随机数,它取自随机数生成
器序列均匀分布的boolean值
2,double nextDouble():Random.nextDouble()返回下一个伪随机数,它取自随机数生成器序列,在0–1之间
均匀分布的double值
3,float nextFloat():Random.nextFloat()返回下一个伪随机数,它取自随机数生成器序列,在0–1之间
均匀分布的float值
4,int nextInt():Random.nextInt()返回下一个伪随机数,它取自随机数生成器序列均匀分布的int值
5,long nextLong():Random.nextLong()返回下一个伪随机数,它取自随机数生成器序列均匀分布的long值
arraycopy方法可以实现一个数组的指定元素复制到另一个数组中
例如:arraycopy(array1,0,array2,0,10)的意思是:将数组array1数组里从索引为0的元素开始,复制到数组array2里索引为0的位置,复制的元素个数为10
声明一个数组,并把数组中重复的元素删除,然后将数组按照一定顺序排列
方法一:
package Test;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
//首先,声明一个数组,并把数组中重复的元素删除,然后将数组按照一定顺序排列
public class Test6 {
public static void main(String[] args) {
Random random=new Random(); //实例化随机数对象
int []array=new int[20];
for(int i=0;i<array.length;i++) {
array[i]=random.nextInt(30); //创建一个长度为20的,且值为0-30之间的随机数组
}
Arrays.sort(array); //对数组进行升序排列
System.out.println("原先的序列为:");
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
if((i+1)%5==0) {
System.out.println();
}
}
Object[] array1=unique(array); //调用unique函数去掉重复数字
System.out.println("去掉重复的数字,还剩有"+array1.length+"个数字,它们的值分别是:");
for(int i=0;i<array1.length;i++) {
System.out.print(array1[i]+" ");
if((i+1)%5==0) {
System.out.println();
}
}
}
public static Object[] unique(int[] array) {
//利用set集合无序不可重复的特性进行元素过滤
Set set =new HashSet(); //实例化一个set集合
for(int i=0;i<array.length;i++) {
set.add(array[i]); //遍历数组并存入集合,如果元素已存在则不会重复存入
}
return set.toArray(); //返回set集合的数组形式
}
}
方法二:
package Test;
import java.util.Arrays;
import java.util.Random;
//首先,声明一个数组,并把数组中重复的元素删除,然后将数组按照一定顺序排列
public class Test8 {
public static void main(String[] args) {
Random random=new Random(); //实例化随机数对象
Object []array=new Object[20];
//因为每个java类都是由object扩展而来的,因此所有的类都属于object类型,所以可以创建object类型的数组存储任何类型的变量
for(int i=0;i<array.length;i++) {
array[i]=random.nextInt(30); //创建一个长度为20的,且值为0-30之间的随机数组
}
System.out.println("未排序的序列为:");
printf(array);
Arrays.sort(array); //对数组进行升序排列
System.out.println("排序后的序列为:");
printf(array); //调用打印输出函数
Object[] array1=ifRepate(array); //调用ifRepate函数去掉重复数字
System.out.println("去掉重复的数字,还剩有"+array1.length+"个数字,它们的值分别是:");
printf(array1);
}
public static void printf(Object[] array) {
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
if((i+1)%5==0) { //使其保持一行总是有五个元素
System.out.println();
}
}
}
public static Object[] ifRepate(Object[] array) {
//需要传入一个object数组,然后返回一个去重后的数组
int t=0; //用来记录去除重复之后的数组长度和给临时数组作为下标索引
Object[] temp=new Object[array.length]; //创建一个临时数组,长度和原来确定的一致
for(int i=0;i<array.length;i++) {
boolean isTrue=true; //声明一个标记变量
for(int j=i+1;j<array.length;j++) {
if(array[i]==array[j]) {
isTrue=false; //在逐次比较元素大小是否相等时,若相等,则标记变量重置
break;
}
}
if(isTrue) { //没有重复元素
temp[t]=array[i];
t++;
}
}
Object[] newarray=new Object[t]; //声明一个新数组,该数组为去重后的数组
//使用arraycopy的方法将刚刚去重的数组拷贝到新的数组中
System.arraycopy(temp,0,newarray,0,t);
return newarray;
}
}
结果:
未排序的序列为:
28 12 3 13 29
24 5 24 20 10
2 11 22 19 26
16 26 27 3 7
排序后的序列为:
2 3 3 5 7
10 11 12 13 16
19 20 22 24 24
26 26 27 28 29
去掉重复的数字,还剩有17个数字,它们的值分别是:
2 3 5 7 10
11 12 13 16 19
20 22 24 26 27
28 29