我正在尝试编写一个返回唯一数字数组的函数。必须对数组进行排序。当有多个元素时,该函数可以正常工作,但是当数组中只有一个元素时,它不起作用。该函数应该返回在该数组中找到的唯一元素,而是返回一个空数组。
为什么会这样?
必须为numUnique和removeDuplicates
排序数组 public static int numUnique (double[] list){
int uniques = 1;
int i = 1;
if(list.length == 0) return 0;
while(i<list.length){
if(list[i] != list[i - 1])
uniques++;
i++;
}
return uniques;
}
public static double[] removeDuplicates(double[] list){
double[] arrayOfUniques = new double[numUnique(list)];
if(list.length == 0) return arrayOfUniques;
int uniques = 1;
int i = 1;
arrayOfUniques[0] = list[0];
while(i < list.length){
if(list[i] != list[i - 1])
arrayOfUniques[uniques++] = list[i];
i++;
}
return arrayOfUniques;
}
阵列:
double [] a = {11,11,21,31,41,41,51,61,61,61,71,71,81,91,91,100,100};
输出:
唯一数字:9
独特的数组: [11.0,21.0,31.0,41.0,51.0,61.0,71.0,81.0,91.0]
但是当数组只有一个元素时它不起作用:
double[] a = {11};
输出:
唯一数字:0
唯一数组:[]
答案 0 :(得分:1)
试试这个..将你的数组转换为list&amp;将列表转换为设置
设置没有重复值..简单
List<String> myList= Arrays.asList(a);//convert array to List
Set<Double> uniqueSet = new HashSet<Double>(myList);//you get unique values
如果您要设置为阵列,请尝试此https://stackoverflow.com/a/5982478/3879847
答案 1 :(得分:0)
public List<Double> removeDuplicates (List<Double> list){
// add elements to al, including duplicates
Set<Double> hs = new HashSet<Double>();
hs.addAll(list);
list.clear();
list.addAll(hs);
return list;
}
答案 2 :(得分:0)
实际上,它对于只有一个唯一元素的arrray也不起作用(例如,它为new double[]{11.0,11.0, 11.0}
返回空数组)。我建议使用Java 8 stream
:
public static double[] removeDuplicates(double[] list){
LinkedHashSet<Double> uniqueElements = Arrays.stream(list)
.boxed()
.collect(Collectors.toCollection(LinkedHashSet::new));
return uniqueElements.stream().mapToDouble(d -> d).toArray();
}
答案 3 :(得分:0)
使用Java 8,我们得到Stream,所以在这种情况下如何使用它:
public static void main (String[] args) {
double[] a = {11,11,21,31,41,41,51,61,61,61,71,71,81,91,91,100,100};
//Way 1 just to print the unique element
DoubleStream.of(removeDuplicate(a)).forEach(System.out::println);
//Way 2 to save the update the array with only the unique element
a = removeDuplicate(a);
}
private static double[] removeDuplicate(double[] a) {
return DoubleStream.of(a).distinct().sorted().toArray();
}
总的来说,我们只是调用方法,然后读取结果并打印值
在removeDuplicate
方法中:我们创建值的Stream,然后我们只保留不同的元素,然后我们对它们进行排序,然后我们回到一个数组(按照你的意愿)
如果您不确定是否必须使用数组,请每次更好地使用List;)