package work;
import java.util.Random;
public class Work {
/**
* 随机生成50个数字(整数),每个数字的范围是[10,50],统计
* 每个数字出现的次数以及出现次数最多的数字与它的个数,最
* 后将每个数字及其出现次数打印出来,如果某个数字出现次数
* 为0,则不要打印它。打印时按照数字的升序排列。
*/
public static void main(String[] args) {
System.out.println(a(10000000));
}
public static String a(int a){
Random random=new Random();
//随机生成的整数放入c数组
int[] c=new int[a];
//不同的每个数放到d数组,出现次数放e数组
int[] d=new int[a];
int[] e=new int[a];
//随机产生整数,放入c数组,随机整数范围[10,50]
int i=0;
while(i<a){
int b=random.nextInt(41)+10;
c[i]=b;
i++;
}
//c数组的整数放d数组次数放e数组
for(int j=0;j<a;j++){//c数组下标 取出一个数
for(int k=0;k<a;k++){//d数组下标 取出一个数 直到d[k]值为零
if(d[k]!=0){//k下标位置值不为0取出值判断
if(d[k]==c[j]){//相等已经存在此数 e数组对应位置值 加1 不相等继续
e[k]=++e[k];
break;
}
}else{//k下标位置值为0第一次放入
d[k]=c[j];
e[k]=1;
break;
}
}
}
//随机数组中不相同的整数个数为m
int m=0;
for(int l=0;l<a;l++){
if(d[l]!=0){//提示---- d数组从0下标开始 值不为0则加1
m++;
}else{
break;
}
}
//出现次数最多的整数 次数为g
int g=e[0];
for(int f=1;f<m;f++){//取出e数组中的次数值 直到值为0或循环结束 不为0则将大的值赋给g
if(e[f]!=0){
if(g<e[f]){
g=e[f];
}
}else{
break;
}
}
//复制 从d,e数组的aa下标位置 复制到n,o数组的bb下标位置 复制长度m
int[] n=new int[m];
int[] o=new int[m];
int aa=0;
int bb=0;
int cc=m;//aa+m d.length bb+m n.length
if(bb>n.length-1||aa>d.length-1||bb<0||aa<0){
}else{
if(aa+m>d.length||bb+m>n.length){
if(d.length-aa>n.length-bb){
cc=n.length-bb;
}else{
cc=d.length-aa;
};
}else{
cc=aa+m;
}
for(int j=aa,k=bb;j<cc;j++,k++){
n[k]=d[j];
o[k]=e[j];
}
}
//System.arraycopy(d, 0, n, 0, m);
//System.arraycopy(e, 0, o, 0, m);
//排序 冒泡排序
for(int p=0;p<m-1;p++){
for(int r=0;r<m-1-p;r++){
if(n[r]>n[r+1]){
int q=n[r];
n[r]=n[r+1];
n[r+1]=q;
int s=o[r];
o[r]=o[r+1];
o[r+1]=s;
}
}
}
//出现次数最多的整数的下标放入到数组y中
int[] y=new int[m];
int x=0;
for(int f=0;f<m;f++){
if(o[f]==g){
y[x]=f;
x++;
}
}
String u="";
for(int t=0;t<x;t++){
u=u+"["+n[y[t]]+"]";
}
u="随机生成的数组中不相同的整数共"+m+"个;\n"+"出现次数最多的整数:"+u+",出现次数"+g+"次;\n";
for(int t=0;t<m;t++){
u=u+"数字:"+n[t]+"出现"+o[t]+"次;\n";
}
return u;
}
}