一系列独特的数字

时间:2017-03-24 15:43:14

标签: java arrays loops

我正在尝试编写一个返回唯一数字数组的函数。必须对数组进行排序。当有多个元素时,该函数可以正常工作,但是当数组中只有一个元素时,它不起作用。该函数应该返回在该数组中找到的唯一元素,而是返回一个空数组。

为什么会这样?

必须为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

唯一数组:[]

4 个答案:

答案 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;)