Java 如何从排序数组中删除重复的元素

Java 如何从排序数组中删除重复的元素,java,arrays,algorithm,bubble-sort,superset,Java,Arrays,Algorithm,Bubble Sort,Superset,正如您在这里所看到的,这是一个按升序对元素进行排序并删除任何重复元素的程序。这里的问题是“删除”代码段。它适用于包含5个元素的数组,其中值(1,3,3,5,5)的顺序是任意的,因为“sort”代码段会处理这个问题。但是,如果你采用一个序列,比如(1,1,1,2,1,3),删除不会完全发生。有人能告诉我哪里出了问题吗 import java.util.*; class Random { static int count=2; public static void main(String[

正如您在这里所看到的,这是一个按升序对元素进行排序并删除任何重复元素的程序。这里的问题是“删除”代码段。它适用于包含5个元素的数组,其中值(1,3,3,5,5)的顺序是任意的,因为“sort”代码段会处理这个问题。但是,如果你采用一个序列,比如(1,1,1,2,1,3),删除不会完全发生。有人能告诉我哪里出了问题吗

import java.util.*;

class Random 
{ 

 static int count=2;
public static void main(String[] args)          
{

        Scanner sc=new Scanner(System.in);
        System.out.println("How many elements are in your set?");// gets your elements
        int input=sc.nextInt();

        int Subsets=No_of_subsets(input);
        // to accept elements
        int arr[]=new int[input+2];
        accept(arr);
        //to sort and delete repeated elements

        sortanddelete(arr);
        System.out.println("Array a=");
        for(int i=0;i<arr.length-count;i++)
        {
            System.out.println(arr[i]);
        }
  System.out.println("Count"+count);
}
public static int No_of_subsets(int a )
{
    double ab=Math.pow(2, a);
    int ans=(int)ab;
    System.out.println("Your superset will have "+ans+" subsets");
    return (int)ans;
}

public static int[] accept(int a[])
{
    Scanner sc=new Scanner(System.in);
    System.out.println("Enter your array elements");
    for(int i=0;i<a.length-2;i++){
        a[i]=sc.nextInt();
    }
    return a;
}

public static int[] sortanddelete(int a[])
{
    int temp;
    for(int i=a.length-3;i>0;i--){
        for(int j=0;j<i;j++){
            if(a[j]>a[j+1]){
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }



    for(int i=0;i<a.length-count;i++){
        if(a[i]==a[i+1]){
            for(int j=i;j<a.length-count;j++){
            a[j]=a[j+1];
        }
        count++;
    }
    }


    return a;
}
import java.util.*;
类随机
{ 
静态整数计数=2;
公共静态void main(字符串[]args)
{
扫描仪sc=新的扫描仪(System.in);
System.out.println(“集合中有多少个元素?”);//获取元素
int input=sc.nextInt();
int Subsets=没有子集(输入);
//接受元素
int arr[]=新的int[input+2];
接受(arr);
//排序和删除重复元素的步骤
排序删除(arr);
System.out.println(“数组a=”);

对于(int i=0;i您只需按如下方式更改delete for循环:

for(int i=0;i<a.length-count;){
        if(a[i]==a[i+1]){
            for(int j=i;j<a.length-count;j++){
               a[j]=a[j+1];
            }
            count++;
        }
        else{
            i++;
        }
 }

用于(int i=0;我认为这是一个阅读/学习java集合的好方法……使用Set-datatype而不是arraylistPerhaps是不起作用的,因为冒泡排序是错误的。您从
a.length-3开始向下,这意味着数组中的最后两项从未排序。我刚刚运行了这段代码。这是我所做的唯一更改。对于输入(1,1,1,2,1,3),它工作正常。你能再检查一下吗?输出应该是1,2,3,对吗?记住你应该从for loopMashregi中删除i++非常感谢你是一个救生员。像老板一样解决了谢谢:)