2016-11-10 12 views
0

Java配列(1 = ?, 2 =?、3 =?など)の各数値の出現を計算します。私の配列は10以上の値をどのように格納できますか?配列javaの出現数をカウントする

int [] arryNum = new int[]{4,4,4,3,4,5,4,3,4,4,4,5,4,5,5,5,4,3,2,15,4,3,4,6,4,3,4,5,4,2,4,5,4,3,2,5,4,3,5,4,0,4,3,4,5,4,3,0,4,5,4,3,5,4,2,3,2,3,4}; 
    int[] counter = new int[] { 0, 0, 0, 0, 0,0 }; 
    for (int i = 0; i < arryNum.length; i++) { 
     counter[arryNum[i] ]++; 
    } 

    for (int i = 0; i < counter.length; i++){ 
     System.out.println((i + 1) + ":" + counter[i]); 
    } 
+0

「Map 」を使用します。キーは数値であり、値は周波数/カウンタです。 – Thomas

+0

erm ... sry @Thomas私は非常にJavaで新しいです、私の質問に基づいて私の価値を格納するためにマップ<整数、整数>を使用する方法を知っているかもしれませんか? –

+0

[Map Interface](https://docs.oracle.com/javase/7/docs/api/java/util/Map.html)を参照してください。マップ自体はインタフェースなので、インスタンスを直接作成することはできませんが、サブクラスのインスタンスを作成することはできます。 IE: 'Map map =新しいHashMap <整数、整数>();'。そこから、 'put(K、V)'、 'get(K)'、 'containsKey(K)'メソッドを使って、あなたが望むことをすることができます。 – Ironcache

答えて

1
public static void main(String[] args){ 
    int[] arryNum = new int[] { 4, 4, 4, 3, 4, 5, 4, 3, 4, 4, 4, 5, 4, 5, 5, 5, 4, 3, 2, 15, 4, 
      3, 4, 6, 4, 3, 4, 5, 4, 2, 4, 5, 4, 3, 2, 5, 4, 3, 5, 4, 0, 4, 3, 4, 5, 4, 3, 0, 4, 
      5, 4, 3, 5, 4, 2, 3, 2, 3, 4 }; 
    Map<Integer, Integer> lookup = new HashMap<>(); 
    for (int key : arryNum) { 
     if(lookup.containsKey(key)) { 
      lookup.put(key, lookup.get(key) + 1); 
     } else { 
      lookup.put(key, 1); 
     } 
    } 

    for (Integer keys : lookup.keySet()) { 
     System.out.println(keys + " Found " + lookup.get(keys) + " Times"); 
    } 

} 
+0

私は実際にあなたの答えを下降させるために耳を傾けていました。誰もが始まりますが、心に留めておいてください。**良い**答えは、いくつかの作業コードを削除するだけではありません! – GhostCat

1

あなたはこのようにそれを行うことができます。

あなたは地図があなたの事をカウントすることを必要とするファースト:

Map<Integer, Integer> countsByNumbers = new HashMap<>(); 

次に、あなたがあなたの数字を繰り返します。最高のために、それぞれ使用して:

for (int number : arryNum) { 
    if (countsByNumbers.containsKey(number)) { 
    int newCount = countsByNumbers.get(number) +1; 
    countsByNumbers.put(number, newCount); 
    } else { 
    countsByNumbers.put(number, 1); 
    } 

いくつかの注意:

  1. はマップ、Javaのコレクションクラスのいずれかの種類が唯一参照種類を扱っているので注意してください。したがって、プリミティブ型ではなくIntegerを使用すると宣言されていますint
  2. コンパイラはMapことがインターフェイスであるが、我々はこの中で、具象クラスをインスタンス化する必要があることをカバー
  3. 注下整数オブジェクトにあなたの配列からint型値をオンにするためにいくつかの魔法を行います場合我々は、単にあなたがJavaの8ストリームでよりsuccint方法でそれを書くことができHashMapの
+0

良い解決策ですが、containsKey()を使用する必要があります。contains()はMapには存在しません。 – user6904265

+0

ありがとうございました...それを修正しました! – GhostCat

1

を使用します。

Map<Integer,Integer> map = new HashMap<Integer,Integer>(); 
Arrays.stream(arryNum).forEach(x -> map.put(x , map.computeIfAbsent(x, s -> 0) + 1)); 
System.out.println(map); 
+0

ヒント:初心者のために...ストリームはおそらく過剰殺人です。 – GhostCat

+0

はい、初心者の方にはあなたのソリューションが適切です。 – user6904265

関連する問題