1

こんにちは、int[]配列にnumberの出現を表示したいと思います。多くの人が同様の質問をしようとしていることがわかりましたが、彼らの配列は文字列です。これが私の作品で、10-25 から 10 の乱数を選び、それを 100 回出力して、出現する数を表示します。例えば:

12 15 16 17 20 14 24 21 22 15 10 12 16 24 23 14 23 12 11 10

10 の頻度: 2 11 の頻度: 1 12 の頻度: 3 など

public void pickRandomNo(int[] a) {
        printHeader();
        Random randomGenerator = new Random();
        for (int row = 0; row < 9; row++) {
            for (int i = 0; i < 10; i++) {
            array[i] = 10 + randomGenerator.nextInt((25 - 10) + 1);
            System.out.print(array[i] + " ");
        } System.out.println("");
      }      
    }

 public void displayOccurences() {
        ArrayList arrlist = new ArrayList();       
        arrlist.add(array);
        int freq = Collections.frequency(arrlist, 10);
        System.out.println("Frequency of 10 is: " + freq);      
    }
4

3 に答える 3

3

さて、あなたのdisplayOccurences方法では、次のことができます:

int freq = Collections.frequency(Arrays.asList(array), 10);

または、昔ながらの方法でそれを実行し、次の手順を繰り返すこともできます。

int freq = 0;
for(final int v : array)
    if(v == 10)
        freq++;

または、Java 8 を使用している場合は、次のようなことを試すことができます。

int freq = Arrays.asList(array).stream().filter(i -> i.equals(10) || i == 10).count();
于 2013-08-29T03:20:38.743 に答える
0

配列の範囲全体を確実にカウントする必要があります。非常に大きな ArrayList に各温度のすべての発生を表示していた同様の問題がありました。この静的メソッドを使用してテーブルを表示しました。

public static void displayOccurances(ArrayList<Integer> tempsList){
    //  get min and max for looping
    int i = Collections.min(tempsList);
    int maxTemp = Collections.max(tempsList);

    // Table Headings
    System.out.println("Frequency of each teperature");
    System.out.printf("%4s%9s%n", "TEMP", "COUNT");
    System.out.printf("%4s%9s%n", "====", "=====");

    // Loop through arraylist to display occurrences
    while (i <= maxTemp) {
        System.out.printf("%4s%9s%n", i, Collections.frequency(tempsList, i));
        i++;
    }
}

ここでは、一般的な配列にリファクタリングします。

public static void displayOccurances(Integer[] array){
    //  get min and max for looping
    int i = Collections.min(array);
    int maxInt = Collections.max(array);

    // Table Headings
    System.out.println("Frequency of each Integer");
    System.out.printf("%3s%9s%n", "INT", "COUNT");
    System.out.printf("%3s%9s%n", "===", "=====");

    // Loop through array to display occurrences
    while (i <= maxInt) {
        System.out.printf("%3s%9s%n", i, Collections.frequency(array, i));
        i++;
    }
}

これが私の最初の回答だったので、コードが正しく表示されない場合は申し訳ありません。

Java Collections クラス (インポートする必要があります) を使用して、出現頻度の最も高いものと最も少ないものを特定するという考え方です。低い範囲から始めて、再びコレクション クラスを使用して、範囲内の各整数の出現回数をチェックします。

0 回の出現を表示したくない場合は、次のように、ループ内の printf の周りに if を配置します。

// Loop through arraylist to display occurances
    while (i <= maxTemp) {
        if (Collections.frequency(tempsList, i) > 0){
            System.out.printf("%4s%9s%n", i, Collections.frequency(tempsList, i));                
        }
        i++;
    }
于 2016-02-21T20:47:45.217 に答える