Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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

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
Loops 如何创建动态while循环?_Loops_Kotlin - Fatal编程技术网

Loops 如何创建动态while循环?

Loops 如何创建动态while循环?,loops,kotlin,Loops,Kotlin,我的问题如下: 我的游戏有50关。每个级别都是一个范围,即0..4、5..18、19..41等。显然,我不想复制/粘贴上述代码50次,然后手动更改级别显示、级别计数、进度指示器和进度条颜色4个变量 我考虑过创建一个对象列表,其中包含范围的起始值、范围的结束值、相应的级别值、进度条的值,但我不确定如何在循环中实现它们。有什么想法吗?您可以为每个级别创建一个数据类,并将所有级别放在一个列表中。然后,创建一个函数来执行调平操作-您不希望将所有代码放在一个循环中: when(cShotCount) {

我的问题如下:

我的游戏有50关。每个级别都是一个范围,即0..4、5..18、19..41等。显然,我不想复制/粘贴上述代码50次,然后手动更改级别显示、级别计数、进度指示器和进度条颜色4个变量


我考虑过创建一个对象列表,其中包含范围的起始值、范围的结束值、相应的级别值、进度条的值,但我不确定如何在循环中实现它们。有什么想法吗?

您可以为每个级别创建一个数据类,并将所有级别放在一个列表中。然后,创建一个函数来执行调平操作-您不希望将所有代码放在一个循环中:

when(cShotCount) {
  in 0..4 -> { // If the total shot count is between 0 and 4
   levelTextView ? .text = "Level: " + 0 // Display level
   editor2?.putInt("levelCount", 0) // Set level
   editor2?.apply()
   mChart.setProgress(((cShotCount?.toFloat()!! - 0) / 5) * 100, true) // Display progress
   mChart.progressColor(Color.BLUE) // Set progress bar color
  }
然后在循环中,您可以调用setLevel函数来设置级别:

data class Level(
    val shotRange: IntRange,
    val level: Int,
    val color: Color
)

val levels = listOf(
    Level(0..4, 0, Color.BLUE)
    // Add all levels
)

fun setLevel(cShotCount: Int) {
    val level = levels.find { cShotCount in it.shotRange }
        ?: throw IllegalArgumentException("Shot count out of level range")
    levelTextView.text = "Level: ${level.level}" // Display level
    editor2.putInt("levelCount", 0) // Set level
    editor2.apply()
    mChart.setProgress(cShotCount.toFloat() / (level.shotRange.endInclusive + 1) * 100, true) // Display progress
    mChart.progressColor(level.color) // Set progress bar color
}
您可以通过将级别放入更好的数据结构来优化级别搜索,从而优化级别搜索。
如果有可预见的放炮次数,可以创建一个由放炮次数索引的数组,以获得快速的O1查找。或者你可以使用一棵树,进行二进制搜索等。

Level应该是一个带有属性的对象,看起来会更整洁。你的标题是while loop,标签是for loop,但我在你的问题中没有看到任何循环。你能澄清一下你在说什么循环吗?当问题是关于kotlin时,为什么要用java标记呢?cShotCount是一个整数,每次发布分数时都会递增。虽然这无关紧要
var cShotCount = 0
while (true) {
    // Do stuff
    setLevel(cShotCount)
}