【问题标题】:For loop misbehave in KotlinKotlin 中的 For 循环行为不端
【发布时间】:2018-02-20 05:00:32
【问题描述】:

我正在尝试遍历 for 循环,但是当我尝试从 2D 数组中获取值并添加该值时,for 循环行为异常。这是我要分享的代码...

 var max_sum = 0
    var total : Int = 0

    val arr = Array(6) { IntArray(6) }
    for (arr_i in 0..5) {
        for (arr_j in 0..5) {
            arr[arr_i][arr_j] = arr_i*arr_j
        }
    }

    if (arr.size <= 3 || arr[0].size <= 3) {
        print("not valid array")
        Log.e("total sum","not valid array")
    } else {


        for (row in 1..arr.size - 1) {
            for (col in 1..arr[0].size - 1) {

                total = arr[row][col] +
                        arr[row - 1][col] +
                        arr[row - 1][col - 1] +
                        arr[row + 1][col + 1] +
                        arr[row + 1][col] +
                        arr[row + 1][col - 1] +
                        arr[row + 1][col + 1]

            }
            max_sum = Math.max(max_sum, total)

        }
        print(max_sum)
        Log.e("total sum",""+max_sum)
    }

【问题讨论】:

  • 行为不端怎么办?很难回答“有些东西不起作用”。
  • @chris 当我尝试从数组中获取值但当时没有得到该数组的任何索引时,它的行为不端。

标签: java android kotlin kotlin-android-extensions kotlin-interop


【解决方案1】:

我使用了直到 kotlin 中的 inbulid 方法提供用于 for 循环的方法来迭代数组并获取总和值。

 var max_sum = 0
    var total : Int = 0

    val arr = Array(6) { IntArray(6) }
    for (arr_i in 0..5) {
        for (arr_j in 0..5) {
            arr[arr_i][arr_j] = arr_i*arr_j
        }
    }

    if (arr.size <= 3 || arr[0].size <= 3) {
        print("not valid array")
        Log.e("total sum","not valid array")
    } else {


        for (row in 1 until arr.size -1 ) {
            for (col in 1 until arr[0].size-1) {

                total = arr[row][col] +
                        arr[row - 1][col] +
                        arr[row - 1][col - 1] +
                        arr[row + 1][col + 1] +
                        arr[row + 1][col] +
                        arr[row + 1][col - 1] +
                        arr[row + 1][col + 1]

            }
            max_sum = Math.max(max_sum, total)

        }
        print(max_sum)
        Log.e("total sum",""+max_sum)
    }

【讨论】:

    【解决方案2】:
    for (row in 1..arr.size - 1) {
        for (col in 1..arr[0].size - 1) {
    
            total = arr[row][col] +
                    arr[row - 1][col] +
                    arr[row - 1][col - 1] +
                    arr[row + 1][col + 1] +
                    arr[row + 1][col] +
                    arr[row + 1][col - 1] +
                    arr[row + 1][col + 1]
    
        }
    

    索引迭代到上限大小 - 1, index + 1 超出

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 2016-03-24
      • 2011-05-11
      • 1970-01-01
      • 2019-02-07
      • 2019-03-09
      相关资源
      最近更新 更多