71079


JAVAのプログラム①と②でリストに要素（インデックス）とランダムに生成した値を入れて表示したのですが、③のようになり思うような表示が出ません。本当は④のようにしたいのですが・・・①、②のどこに、どのような修正が必要でしょうか。

①MyData クラスは，データの生成番号と値を格納する

[code]

    public class MyData {
        public int index;   
        public double data; 
        //コントラクタ
        public MyData(int index, double data){
        }
    }
    
[/code]

②ランダムに生成された 10 個の値を List に格納、表示

[code]

    import java.util.ArrayList;
    import java.util.List;
    public class Randomprintln {
         public static void main(String[] args) { 
             List<MyData> list = new ArrayList<>();          
             for(int i=0; i < 10; i++) {       
                 MyData d = new MyData(i, Math.random());      
                 list.add(d);
              } 
          System.out.println(list);
         } 
    }
    
[/code]

③上記実行時のコンソールの表示結果

[code]

    [pro4202042.MyData@15db9742, pro4202042.MyData@6d06d69c, pro4202042.MyData@7852e922, pro4202042.MyData@4e25154f, pro4202042.MyData@70dea4e, pro4202042.MyData@5c647e05, pro4202042.MyData@33909752, pro4202042.MyData@55f96302, pro4202042.MyData@3d4eac69, pro4202042.MyData@42a57993]
    
[/code]

④本当は表示させたい結果のイメージ

[code]

    [0]=乱数
    [1]=乱数
    [2]=乱数
    :
    :
    
[/code]


CC BY-SA 4.0
2020-10-10T14:00:44.257
71078
2020-10-10T16:15:45.320
2020-10-10T15:44:25.777
21092
34781
question
java
リストの要素と内容表示について


コンストラクタに処理が無いので

[code]

    public MyData(int index, double data){
    }
    
[/code]

引数の`index`も`data`も無視されます（フィールド変数`index`、`data`には値が設定されません）。まずはそれを以下のように修正する必要があります。

[code]

    public MyData(int index, double data){
        this.index = index;
        this.data = data;
    }
    
[/code]

それから、`System.out.println(list);`で値を表示したいのであれば、`MyData`に`toString()`を実装する必要があります。

[code]

    @Override
    public String toString() {
        return String.format("[%d]=%f",index, data);
    }
    
[/code]

ただし、これだと「④本当は表示させたい結果のイメージ」とは若干異なる出力になりますので、必要に応じて実装を修正して下さい（ループ内で`System.out.println()`するとか）。


CC BY-SA 4.0
2020-10-10T15:41:27.987
71079
2020-10-10T15:46:41.810
2020-10-10T15:46:41.810
21092
21092
71078
answer


以下は
[java.ArrayList.forEach()](https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayList.html#forEach-
java.util.function.Consumer-) を使う場合です。

[code]

    import java.util.ArrayList;
    import java.util.List;
    
    class MyData {
      public int index;
      public double data;
    
      //コントラクタ
      public MyData(int index, double data){
        this.index = index;
        this.data = data;
      }
    }
    
    public class Randomprint {
      public static void main(String[] args) {
        List<MyData> list = new ArrayList<>();
        for(int i=0;i<10;i++) {
          list.add(new MyData(i, Math.random()));
        }
        list.forEach(
          d -> System.out.printf("[%d]=%.5f\n", d.index, d.data));
      }
    }
    
    =>
    $ javac -Xlint:unchecked Randomprint.java
    $ java Randomprint
    [0]=0.54200
    [1]=0.94190
    [2]=0.13860
    [3]=0.90671
    [4]=0.45146
    [5]=0.92236
    [6]=0.22481
    [7]=0.79221
    [8]=0.46996
    [9]=0.65752
    
[/code]


CC BY-SA 4.0
2020-10-10T16:15:45.320
71081
2020-10-10T16:15:45.320
71078
answer