質問編集履歴

1 アドバイスを受けて

heroherotail

heroherotail score 14

2017/02/08 17:47  投稿

Kotlin(Java?)でのArrayListへの要素の追加についての質問です
実行環境はKotlin ver1.0.6でJava8です
ArrayListを使い,要素の追加・取り出しを行いたいのですが
うまくいきません
for文の中でmodelをModelFactory#createModelから作成し,
ArrayListであるmodelsにaddしているのですが,新しく作成したmodelが
既に入っている要素を全て塗りつぶしてしまう結果となります.
以下が実装です
###ソースコード
```Kotlin
fun main(args: Array<String>){
   val models: ArrayList<Model> = ArrayList()
   for (i in 0..4){
       val model = ModelFactory().createModel()
       models.add(model)
       for (m in models)
           println("i,x,y = " + (i+1).toString() + "," + m.x.toString() + "," + m.y.toString())
   }
   for (model in models)
       println("x,y = " + model.x.toString() + "," + model.y.toString())
}
```
### 結果
```
i,x,y = 1,0.07473496472821772,0.30797528302849175
i,x,y = 2,0.6254996345471039,0.2674472108375042
i,x,y = 2,0.6254996345471039,0.2674472108375042
i,x,y = 3,0.927361187034477,0.8790114619475532
i,x,y = 3,0.927361187034477,0.8790114619475532
i,x,y = 3,0.927361187034477,0.8790114619475532
i,x,y = 4,0.32678477794185257,0.33446341578663796
i,x,y = 4,0.32678477794185257,0.33446341578663796
i,x,y = 4,0.32678477794185257,0.33446341578663796
i,x,y = 4,0.32678477794185257,0.33446341578663796
i,x,y = 5,0.1805648560841221,0.8108814141273503
i,x,y = 5,0.1805648560841221,0.8108814141273503
i,x,y = 5,0.1805648560841221,0.8108814141273503
i,x,y = 5,0.1805648560841221,0.8108814141273503
i,x,y = 5,0.1805648560841221,0.8108814141273503
x,y = 0.1805648560841221,0.8108814141273503
x,y = 0.1805648560841221,0.8108814141273503
x,y = 0.1805648560841221,0.8108814141273503
x,y = 0.1805648560841221,0.8108814141273503
x,y = 0.1805648560841221,0.8108814141273503
```
素人考えで直接的な関係はないと思いますが,実行に使ったクラスです
```Kotlin
class Model (var x: Double, var y: Double){
   companion object{
       val CREATOR = Model(0.0,0.0)
   }
}
```
```Kotlin
class Logic {
   companion object{
       fun customize(model: Model): Model {
           var random = Random()
           model.x = random.nextDouble()
           model.y = random.nextDouble()
           return model
       }
   }
}
```
```Kotlin
class ModelFactory {
   fun createModel(): Model {
       val model = Logic.customize(Model.CREATOR)
       return model
   }
}
```  
 
 
 
###アドバイスを受けて  
Modelクラスを以下のように変更した結果,期待通りの動きを得ることが出来ました  
```Kotlin  
class Model (var x: Double, var y: Double)  
```
  • Java

    17663 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Kotlin

    770 questions

    Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る