2016-07-06 3 views
-2

ここからわかるように、要素を昇順でソートし、繰り返し要素を削除するプログラムです。ここで問題となるのは、「削除」スニペットです。 'sort'スニペットがそれを処理するので、値(1,3,3,5,5)が任意の順序である5つの要素の配列に対して機能します。しかし、(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; 
} 

}次のようにあなただけの変更forループを削除する必要が

+0

は、Javaコレクションを読み書きするのに適しています.... –

+0

arraylistの代わりにデータ型を設定する – CSK

+0

バブルの並べ替えが間違っている可能性があります。あなたは 'a.length-3'で始まり、下に行くことになります。つまり、配列の最後の2つの項目は決してソートされません。 –

答えて

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

はので、私は++(すべての要素がシフトした場合でも)、あなたは欠場いくつかの繰り返し。実際、シフトが行われると、私は増分されたようなものになります。だから、もしifが起こらなければ、あなたはiをインクリメントする必要があります。

+0

いいえ、それはちょうどそれを試してみた –

+0

私は今このコードを実行しました。それが私が作った唯一の変化です。そして、入力(1,1,1,2,1,3)に対しては正しく動作します。もう一度確認できますか?出力は1 2 3、右でしょうか? –

+0

forループからi ++を削除することを忘れないでください。 –

関連する問題