

**ソースコード**

[code]

    int[] frequencies = new int [10];
    int[] ar1 = new int[100];
    
    for(int i = 0; i <  ar1.length; i++) {
        ar1[i] = rand.nextInt(10);
        System.out.println(ar1[i]);
        int array =ar1[i];
        frequencies[array]++;
    
[/code]

メソッドを使って0~9の整数それぞれの出現回数を*で表示したいのですがどうしたらいいか分かりません...

**例**

[code]

    6, 8, 5, 3, 2, 5, 7, 5, 6, 9, 3, 0, 6, 2, 6, 3, 4, 3, 8, 6, 
    3, 3, 6, 0, 6, 5, 6, 1, 7, 3, 3, 6, 4, 1, 6, 1, 0, 7, 7, 2, 
    2, 6, 5, 1, 1, 8, 4, 4, 6, 4, 4, 1, 6, 5, 3, 6, 8, 5, 9, 4, 
    5, 9, 1, 9, 8, 6, 0, 7, 4, 3, 2, 5, 2, 6, 1, 8, 5, 8, 4, 3, 
    3, 6, 8, 4, 2, 6, 9, 7, 6, 3, 7, 7, 2, 8, 5, 0, 9, 9, 2, 4
    
[/code]

[code]

    0: *****
    1: ********
    2: *********
    3: *************
    4: ***********
    5: ***********
    6: *******************
    7: ********
    8: *********
    9: *******
    
[/code]


CC BY-SA 4.0
2020-03-13T19:49:42.647
63816
2020-03-14T16:34:10.690
2020-03-14T16:34:10.690
3060
question
java
乱数で表示した100個の0～9の整数それぞれの出現回数をアスタリク(*)で表示したい


表示にフォーカスして、元の値をとってはいません。必要であれば、  
修正してください。

[code]

    public class Sample {
    
        public static void main(String[] args) {
            int[] frequencies = new int[10];
            Random rand = new Random(System.currentTimeMillis());
    
            for (int i = 0; i < 100; i++) {
                ++frequencies[Math.abs(rand.nextInt()%frequencies.length)];
            }
    
            for(int i=0; i<frequencies.length;i++){
                System.out.println(creteMessage(i,frequencies[i]));
            }
    
        }
    
        public static String creteMessage(int index,int number){
            String msg;
            StringBuilder stb = new StringBuilder();
    
            for(int i=0;i<number;i++){
                stb.append("*");
            }
    
            return msg=String.format("[%02d]:%s", index,String.valueOf(stb));
        }
    }
    
[/code]

処理結果は以下の通りです。

[code]

    [00]:*****
    [01]:**********
    [02]:**********
    [03]:******
    [04]:**************
    [05]:************
    [06]:*************
    [07]:************
    [08]:**********
    [09]:********
    
[/code]


CC BY-SA 4.0
2020-03-14T03:44:13.333
63820
2020-03-14T16:20:56.353
2020-03-14T16:20:56.353
10174
10174
63816
answer


質問者はいなくなってしまいましたが、せっかく調べて"*"を出す部分だけでも作ったので、興味がある人の参考に僅かでもなれば幸いです。

[code]

    (new java.util.Random()).ints(100, 0, 10)
        .boxed()
        .collect(java.util.stream.Collectors.groupingBy(
            java.util.function.Function.identity(), java.util.stream.Collectors.counting()))
        .entrySet()
        .stream()
        .map(e -> e.getKey() + ": " + "*".repeat(e.getValue().intValue()))
        .forEach(System.out::println);
    
[/code]

* * *

少しだけ解説。

`Random#ints()`は乱数のIntStreamを作るメソッドです。それを`collect(...)`でグルーピングしながら、カウントしています(この部分は、色々参考にして書いたので、ちょっとよくわかっていない)。なお、`boxed()`でIntStreamをボックスしてStreamにしないとダメのようです(直接する方法はあるかも知れない)。あとは、普通のStreamにして`map(...)`で文字列に使えて、出力するだけとなります。なお、文字列の繰り返しに使っている`String#repeat()`はJava
11かららしいので、Java 11でないと動作しません。

`for`文を使うより、慣れればこっちの方が速いと思っています。ただ、JavaのStreamは使いづらい部分がちょっとあるので、普段から使うかは微妙ですが。(普段はJavaをほとんど書いていないので、なんとも言えません。)


CC BY-SA 4.0
2020-03-14T11:54:05.327
63831
2020-03-14T12:01:01.720
2020-03-14T12:01:01.720
7347
7347
63816
answer