2016-07-06 116 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 ++ –