package szprctice;

public class Practice1 {
/*
定义一个方法传入一个int类型数组,输出这个数组中每一个数字及其出现的个数
例如 传入数组[1,2,2,2,3,3,4,4,4,4]
打印结果:
数字1出现了1次
数字2出现了3次…
如:原数组: int[] arr = {1,2,2,2,3,3,4,4,4,4,22,0,0}
记录出现的元素 int[] ele = {1,2,3,4,22,0}
记录元素出现的次数 int[] count = {1,3,2,4,1,2}
*/
//1.定义主方法
public static void main(String[] args) {
int[] arr = {1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 22, 0, 0};
getPractice(arr);
}

public static void getPractice(int[] arr) {
//定义一个新数组,用来存放不重复的元素
int[] ele = new int[arr.length];//因为不确定新数组的长度,但一定不超过原数组,所以用原数组做为新数组的长度
//再定义一个新数组,用来存放不重复数组的个数(它的长度和新数组的长度一定是一致的)
int[] count = new int[arr.length];
//往新数组中添加一个初始值,把原数组的第一个值加进去
ele[0] = arr[0];
//所以count[]中第一个值,初始为1
count[0] = 1;
//因为新数组的长度,我们是未知的,所以定义一个变量代表新数组的长度
int index = 1;

//遍历原数组,取出原数组中的每一个值
for (int i = 1; i < arr.length; i++) {
//定义一个变量代替数组中的每一个值
int temp = arr[i];
/*依次拿原数组中的每一个值去和ele新数组中的值去比较,
如果ele中存在这一个值,就把count数组对应的索引+1,如果没有
相等的值,则在ele数组中新添,对应的索引上附上1。*/
boolean isFind = false;//这一步也很关键
for (int j = 0; j < index; j++) {
if (temp == ele[j]) {
count[j]++;
isFind = true;
}
}

if (!isFind) { //这一步一定要定义在内循环的外面
ele[index] = temp;
count[index] = 1;
index++;
}
}

for (int i = 0; i < index; i++) { //关键:这一步<的是index,因为(ele.length)并不是我们要的数组长度
System.out.println("数字" + ele[i] + "出现了" + count[i] + "次…");
}
}
}