2016-07-06 80 views
-2

正如您在这里看到的,这是一个程序,它按升序对元素进行排序并删除任何重复的元素。这里的问题与'删除'片段有关。它适用于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; 
} 

}

+0

看起来像是一个很好的点阅读/学习Java集合.... –

+0

使用设置数据类型而不是arraylist – CSK

+0

也许它不工作,因为你的冒泡排序是错误的。你从'a.length-3'开始往下走,这意味着数组中的最后两项不会被排序。 –

回答

0

你只需要改变你删除循环如下:

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++; 
     } 
} 

因为如果你总是做我++(即使当所有的元素被移动),那么你就错过一些重复。实际上,当转移完成时,就像我已经增加了一样。所以,如果没有发生,你只需要增加i。

+0

不,这是不对的只是试了一下 –

+0

我刚刚运行此代码。这是我做出的唯一改变。而对于输入(1,1,1,2,1,3)它正常工作。你能再次检查吗?输出应该是1 2 3,对吗? –

+0

请记住,你应该从for循环中删除i ++ –