2017-09-17 13 views
-1

配列要素の頻度を探したい。繰り返しなしで配列要素の周波数を計算する

入力配列:

1,2,3,4,2,3,4,5,8 

の予想される出力(桁周波数):

1 1 
2 2 
3 2 
4 2 
5 1 
8 1 

私のJavaコードは次のとおりです。のような

class Fre 
{ 
public static void main(String ar[]) 
{ 
    frequencycount(new int[]{1,2,3,3,2,1,1,1,5,6,5,8,9,6}); 
} 


static void frequencycount(int x[]) 
{ 
    int i=0; 
    int j=0; 
    int fr[]=new int[x.length]; 
    for(i=0;i<fr.length;i++) { 
    fr[i]=0; 
    } 

    /////calculating frequency 
    for(i=0;i<digit.length;i++) { 
     for(j=0;j<digit.length;j++) { 
      if(x[i]==x[j]) { 
      fr[i]++; 
      } 
     } 
     } 

    for(i=0;i<fr.length;i++) { 
     System.out.println(x[i]+" "+fr[i]); 
    } 
    } 
}//class 

出力での問題は、それがされています配列要素を繰り返す。同様に:

digit frequency: 


1 1 
2 2 
3 2 
4 2 
2 2 
3 2 
4 2 
7 1 
8 1 

どのようにして配列の要素を繰り返すことなく、所望の周波数を得ることができますか?どんな助けもありがとう。

+0

あなたは一意の値とは何か、既に一度カウントされた値に達すると何が起こるのか考えてみてください。 – nullpointer

+1

私は 'x [i]'の代わりに 'i'を出力しなければならないと思います – 3stud1ant3

+0

@ 3stud1ant3なぜですか? – user227666

答えて

0

Map<Integer, Integer>のようなマップを使用して、値を見つけるたびにキーの値を大きくするのはなぜですか?次に、マップをループしてその値を印刷できます。これはまた、ネストされたforループからあなたを保存します。

Here's a tutorial はあなたcode.Insteadでコンパイルおよび論理エラーがたくさんありますMap

+0

'Map 'を 'Map 'に置き換えたいかもしれません。 –

+0

マップを使用せずに行う必要があります。それは難しい部分です。 – user227666

+0

@ArchdukeLiamusプリミティブを使用できません。 – EthanBar

0

を使用して始めるために、私はコードの下に使用します。

class Fre { 
    public static void main(String ar[]) { 
     frequencycount(new int[]{1, 2, 3, 3, 2, 1, 1, 1, 5, 6, 5, 8, 9, 6}); 
    } 


    static void frequencycount(int x[]) { 

     int fr[] = new int[maxElement(x)]; 
     /* default value of all elements is 0 no need to run this code 
     for (i = 0; i < fr.length; i++) { 
      fr[i] = 0; 
     }*/ 


     for (int k = 0; k < x.length; k++) { 
      //update index with count 
      int value = x[k]; 
      fr[value] = fr[value] + 1; 
     } 

     for (int k = 0; k < fr.length; k++) { 
      if (fr[k] != 0) { 
       System.out.println(k+" " + fr[k]); 
      } 
     } 
    } 
} 
+0

arrayindexOutof行の '' fr [value] = fr [value] + 1; ''のエラーが発生しました – user227666

+0

ここでの問題は、int fr [] = new int [x.length]です。長さをx.lengthの代わりに最大要素として定義する必要があります。 – Gaurav

+0

@ user227666マップを使用しないと、受け入れる必要のある値の範囲の長さの配列が必要です。どちらかというと、関数のような独自の 'Map'メソッドを作成するか、単に愚かな長い配列を作る必要があります。 – EthanBar

関連する問題