首页 文章

Android Kotlin替换为下一个循环

提问于
浏览
0

我们有一个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++) 循环更改为while循环,这看起来好了,然后我们意识到while循环运行了3个循环,每个按钮单击 . Kotlin还抱怨了这些代码行 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 Next循环 for (L in 15 downTo 0 step 1) 似乎你不能算数了所以我们认为我们会使用 hm:size 作为值15并且只使用 downTo

所以问题是

  • 我们如何使用Kotlin For Next Loop语法并在构造中包含hm:size?

  • 我们将L声明为整数,但Kotlin不会让我们在While循环中使用 L = L + 1 ,也不会使用For Next循环为什么?

  • 这里是奇怪的部分通知我们可以通过使用 X = X + 3 来增加X是 X 被声明为内部 var X = 0 ,因为 L 同样的方式

3 回答

  • 0

    我们使用了一套优雅的代码来完成问题的答案 .
    我们使用了CharArray,因为格伦德尔和Array的概念似乎没问题

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

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

    这是迭代使用的CharArray的工作代码

    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可能涉及更少的代码行 . 控制外观似乎是错误的方向 . 我们可能会尝试使用KEY WORD "when"来对此问题应用逻辑

  • 1

    好的,我会咬人的 .
    以下代码将打印您的三元组:

    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])
    }
    
  • 1

    经过一些进一步的研究后,我们的问题得到了部分答案 . 此代码仅显示如何遍历散列映射索引此遍历,每3条记录需要添加以使代码完整 . 这个答案适合任何偶然发现问题的人 . 下面提供了代码和资源的链接

    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

    在问这个问题之前我们只进行了适度的研究 . 我们的Appoligies . 如果有人与Kotlin重新开始,那么第二个链接可能更有 Value . 我们很少在Android Developers页面中找到可理解的答案 . Kotlin和Android页面初学者更友好,而不是技术范围 . 享受链接Kotlin and Android

相关问题