Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin设计模式,观察者问题_Kotlin_Design Patterns_Observer Pattern - Fatal编程技术网

Kotlin设计模式,观察者问题

Kotlin设计模式,观察者问题,kotlin,design-patterns,observer-pattern,Kotlin,Design Patterns,Observer Pattern,我尝试了不同的方法,但结果仍然不是应该的。我必须在Kotlin创建一个带有一些设计模式的小天气应用程序 interface Sensor { fun getTemperature() : Float } class RandomSensor () : Sensor { override fun getTemperature(): Float { var randomTemp : Double = Random.nextDouble (0.0, 40.00)

我尝试了不同的方法,但结果仍然不是应该的。我必须在Kotlin创建一个带有一些设计模式的小天气应用程序

interface Sensor {
    fun getTemperature() : Float
}

class RandomSensor () : Sensor {
    override fun getTemperature(): Float {
        var randomTemp : Double = Random.nextDouble (0.0, 40.00)
        return randomTemp.toFloat()
    }
}

class Thermometer (var sensor: Sensor)  {

    var newTemp = this.sensor.getTemperature()

    val tempwerte = mutableListOf<Float>(newTemp)

    val observers = mutableListOf<TemperaturObserver>()

    fun register(observer:TemperaturObserver) {
        observers.add(observer)
    }

    fun remove(observer: TemperaturObserver) {
        observers.remove(observer)
    }

    fun dataChanged() {
        observers.forEach {it.update(newTemp)}
    }

    fun messen() {
        var n = 100
        for (i in 0 until n) {
            newTemp = this.sensor.getTemperature()

            if(i != n) {
                dataChanged()
                tempwerte.add(newTemp)
            }
        }
    }
    fun getTenlastItems () = tempwerte.takeLast(10)
    fun getHundredItems () = tempwerte.take (100)
}
等等

有什么办法解决这个问题吗?应该是这样的:

[21.0, 23.0, 0.0, 1.0, 35.0, 4.0, 14.0, 3.0, 16.0, 36.0]
[22.0, 27.0, 21.0, 32.0, 20.0, 31.0, 37.0, 33.0, 24.0, 2.0]
等等


谢谢

观察到的输出可以解释为您在
WeatherReport.update
方法中创建了一个新列表,并用相同的
newTemp
值填充它十次

如果您希望收集值并在收集到十个值后将其打印出来,则应创建一次列表,然后一次填充一个值,并检查是否已达到十个值:

class WeatherReport(private var station: Thermometer) : TemperaturObserver {
    val observedValues = mutableListOf<Float>()
    override fun update(newTemp: Float) {
        observedValues.add(newTemp)
        if (observedValues.size >= 10) {
            println(observedValues)
            observedValues.clear()
        }
    }
}
等级天气报告(专用var站:温度计):温度观察员{
val observedValues=mutableListOf()
覆盖乐趣更新(newTemp:Float){
观察到的值。添加(newTemp)
如果(observedValues.size>=10){
println(观测值)
observedValues.clear()
}
}
}

观察到的输出可以解释为,您在
天气报告中创建了一个新列表。更新
方法,并用相同的
newTemp
值填充它十次

如果您希望收集值并在收集到十个值后将其打印出来,则应创建一次列表,然后一次填充一个值,并检查是否已达到十个值:

class WeatherReport(private var station: Thermometer) : TemperaturObserver {
    val observedValues = mutableListOf<Float>()
    override fun update(newTemp: Float) {
        observedValues.add(newTemp)
        if (observedValues.size >= 10) {
            println(observedValues)
            observedValues.clear()
        }
    }
}
等级天气报告(专用var站:温度计):温度观察员{
val observedValues=mutableListOf()
覆盖乐趣更新(newTemp:Float){
观察到的值。添加(newTemp)
如果(observedValues.size>=10){
println(观测值)
observedValues.clear()
}
}
}

非常感谢!非常感谢!很好
class WeatherReport(private var station: Thermometer) : TemperaturObserver {
    val observedValues = mutableListOf<Float>()
    override fun update(newTemp: Float) {
        observedValues.add(newTemp)
        if (observedValues.size >= 10) {
            println(observedValues)
            observedValues.clear()
        }
    }
}