所以我试图制作一个计算数组中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]。算法在哪里出错了?感谢
答案 0 :(得分: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;
}