実行環境はKotlin ver1.0.6でJava8です
ArrayListを使い,要素の追加・取り出しを行いたいのですが
うまくいきません
for文の中でmodelをModelFactory#createModelから作成し,
ArrayListであるmodelsにaddしているのですが,新しく作成したmodelが
既に入っている要素を全て塗りつぶしてしまう結果となります.
以下が実装です
###ソースコード
Kotlin
1fun main(args: Array<String>){ 2 val models: ArrayList<Model> = ArrayList() 3 4 for (i in 0..4){ 5 val model = ModelFactory().createModel() 6 models.add(model) 7 for (m in models) 8 println("i,x,y = " + (i+1).toString() + "," + m.x.toString() + "," + m.y.toString()) 9 } 10 11 for (model in models) 12 println("x,y = " + model.x.toString() + "," + model.y.toString()) 13} 14
結果
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
1class Model (var x: Double, var y: Double){ 2 companion object{ 3 val CREATOR = Model(0.0,0.0) 4 } 5}
Kotlin
1class Logic { 2 companion object{ 3 fun customize(model: Model): Model { 4 var random = Random() 5 model.x = random.nextDouble() 6 model.y = random.nextDouble() 7 return model 8 } 9 } 10}
Kotlin
1class ModelFactory { 2 fun createModel(): Model { 3 val model = Logic.customize(Model.CREATOR) 4 return model 5 } 6}
###アドバイスを受けて
Modelクラスを以下のように変更した結果,期待通りの動きを得ることが出来ました
Kotlin
1class Model (var x: Double, var y: Double)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/08 08:45