代码之家  ›  专栏  ›  技术社区  ›  Vector

Android Kotlin用for next循环替换while

  •  0
  • Vector  · 技术社区  · 7 年前

    我们有一个HashMap Integer/String,在Java中,我们将遍历HashMap并通过单击按钮一次显示3个键值对。下面的Java代码

    hm.put(1, "1");
    hm.put(2, "Dwight");
    hm.put(3, "Lakeside");
    hm.put(4, "2");
    hm.put(5, "Billy");
    hm.put(6, "Georgia");
    hm.put(7, "3");
    hm.put(8, "Sam");
    hm.put(9, "Canton");
    hm.put(10, "4");
    hm.put(11, "Linda");
    hm.put(12, "North Canton");
    hm.put(13, "5");
    hm.put(14, "Lisa");
    hm.put(15, "Phoenix");
    onNEXT(null);
    
    public void onNEXT(View view){
        etCity.setText("");
        etName.setText("");
        etID.setText("");
    
        X = X + 3;
    
        for(int L = 1; L <= X; L++ ){
            String id = hm.get(L);
            String  name = hm.get(L = L + 1);
            String  city = hm.get(L = L + 1);
    
            etID.setText(id);
            etName.setText(name);
            etCity.setText(city);
    
        }
    
        if(X == hm.size()){
            X = 0;
        }
    }
    

    我们解码让Android Studio把上面的Java代码转换成Kotlin 转换器决定改变 for(int L = 1; L <= X; L++) String name = hm.get(L = L + 1); String city = hm.get(L = L + 1);

    我们将在下面发布Kotlin代码并提出问题

    fun onNEXT(view: View?) {        
        etCity.setText("")
        etName.setText("")
        etID.setText("")
    
        X = X + 3
    
        var L = 0
    
        while (L <= X) {
            val id = hm[L - 2]
            val name = hm.get(L - 1)
            val city = hm.get(L)
    
            etID.setText(id)
            etName.setText(name)
            etCity.setText(city)
    
            L++
        }
    
        if (X == hm.size) {
            X = 0
        }
    }
    

    我们试着像这样为下一个循环写一个 for (L in 15 downTo 0 step 1) 看来你数不到所以我们想用 hm:size 值15,使用 downTo

    所以问题是

    • 如何使用Kotlin作为下一个循环语法并在构造中包含hm:size?
    • L = L + 1 在While循环或For Next循环中为什么?
    • 下面是奇怪的部分注意,我们可以使用 X = X + 3 X 在上面声明为内部 var X = 0 L 同样的方式
    3 回复  |  直到 7 年前
        1
  •  1
  •   Alexey Soshin    7 年前

    好吧,我来咬。
    以下代码将打印您的三元组:

    val hm = HashMap<Int, String>()
    hm[1] = "1"
    hm[2] = "Dwight"
    hm[3] = "Lakeside"
    hm[4] = "2"
    hm[5] = "Billy"
    hm[6] = "Georgia"
    hm[7] = "3"
    hm[8] = "Sam"
    hm[9] = "Canton"
    hm[10] = "4"
    hm[11] = "Linda"
    hm[12] = "North Canton"
    hm[13] = "5"
    hm[14] = "Lisa"
    hm[15] = "Phoenix"
    
    for (i in 1..hm.size step 3) {
        println(Triple(hm[i], hm[i + 1], hm[i + 2]))
    }
    

    var count = 0
    fun nextTriplet(hm: HashMap<Int, String>): Triple<String?, String?, String?> {
        val result = mutableListOf<String?>()
        for (i in 1..3) {
            result += hm[(count++ % hm.size) + 1]
        }
        return Triple(result[0], result[1], result[2])
    }
    
        2
  •  1
  •   James_Duh    7 年前

    我们使用了一组非常不优雅的代码来完成这个问题的答案。
    我们用了一个字谜,因为格伦德尔似乎对数组的概念没问题

    internal var YY = 0
    val CharArray = arrayOf(1, "Dwight", "Lakeside",2,"Billy","Georgia",3,"Sam","Canton")
    

    在onCreate方法中,我们通过调用onCO(null)加载了第一组数据

        fun onCO(view: View?){
    
        etCity.setText("")
        etName.setText("")
        etID.setText("")
        if(CharArray.size > YY){
            val id = CharArray[YY]
            val name =  CharArray[YY + 1]
            val city = CharArray[YY + 2]
            etID.setText(id.toString())
            etName.setText(name.toString())
            etCity.setText(city.toString())
            YY = YY + 3
        }else{
            YY = 0
            val id = CharArray[YY]
            val name =  CharArray[YY + 1]
            val city = CharArray[YY + 2]
            etID.setText(id.toString())
            etName.setText(name.toString())
            etCity.setText(city.toString())
            YY = YY + 3
        }
    

    简单但不优雅。似乎代码是比迭代更好的计数器示例。
    控制For Next Look可能需要较少的代码行。控制外观似乎是错误的方向。我们可以试着用关键词“when”来表达这个问题的逻辑

        3
  •  0
  •   Vector    7 年前

    经过进一步的研究,这里是我们问题的部分答案

    fun main(args: Array<String>) {
    val map = hashMapOf<String, Int>()
    map.put("one", 1)
    map.put("two", 2)
    
    for ((key, value) in map) {
        println("key = $key, value = $value")
    }
    }
    

    该链接允许您在浏览器中尝试Kotlin代码示例 LINK

    在提出这个问题之前,我们只做了适度的研究。我们的任命。如果有人重新开始与科特林这第二个环节可能是更大的价值。我们很少在Android开发者页面上找到可以理解的答案。Kotlin和Android页面对初学者更友好,在范围上没有那么技术性。享受链接 Kotlin and Android