使用列表计算int数组的出现次数
问题描述:
所以我试图编写一个程序来统计数组中int的出现次数。我试图做的是做一个方法列出唯一的整数,然后另一种方法来比较列表项目与原始数组项目。使用列表计算int数组的出现次数
public List listUnique(int[] arr){
Arrays.sort(arr);
List <Integer> temp = new ArrayList<>();
int currentInt = 0;
for (int i = 0; i < arr.length; i++){
if(arr[i] != currentInt){
temp.add(arr[i]);
currentInt = arr[i];
}
}
return temp;
}
public int[] countDupli(List unique, int[] arr){
int [] ret = new int[unique.size()];
Iterator <Integer> iterator = unique.iterator();
for (int l = 0; l < unique.size(); l++){
ret[l] = iterator.next().intValue();
}
int[] dupli = new int[ret.length];
for (int j = 0; j < ret.length; j++){
dupli[j] = 0;
}
for (int k = 0; k < ret.length; k++){
for (int i = 0; i < arr.length; i++){
if (ret[k] == arr[i]){
dupli[k]+= 1;
}
}
k++;
}
return dupli;
}
它没有做什么打算做什么。例如,{1,2,...,1,2}中的10个项目的输入打印正确的唯一项目,但仅输出1的计数,但不输出2. dupli = [5,0]。算法出错了?谢谢
答
在您的代码中尝试调试或只是打印ret []值,看看是否存在所有唯一值。
其他建议
List <Integer> temp = new ArrayList<>();
int currentInt = 0;
for (int i = 0; i < arr.length; i++){
if(arr[i] != currentInt){
temp.add(arr[i]);
currentInt = arr[i];
}
您可以简单地使用HashSet的,那么你就不必写上面的代码中找到唯一的值。 HashSet不存储重复值。
Set<Integer> set = new HashSet<Integer>(Arrays.asList(arr));
然后你可以使用迭代器,并与你的排序数组进行比较,并同时增加计数。
默认情况下,您可以跳过以下for循环,因为java将其初始化为0
。
int[] dupli = new int[ret.length];
for (int j = 0; j < ret.length; j++){
dupli[j] = 0;
}
你试过调试吗? – shmosel
还没有,对不起,我在java中是一个新手。 –
听起来像是一张地图工作 – Andreas