Android Kotlin在下一个循环中替换

时间:2018-08-16 01:48:15

标签: for-loop kotlin

我们有一个HashMap整数/字符串,在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个循环。同样,科特林对这些代码行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)编写一个For Next循环 看来您无法计数,所以我们认为我们将hm:size的值设为15,而只使用downTo

问题是

  • 我们如何使用Kotlin For Next Loop语法并将hm:size包含在构造中?
  • 我们将L声明为整数,但Kotlin不允许我们使用 While循环中的L = L + 1或For Next循环中的WHY吗?
  • 在这里,奇怪的是,我们可以使用X = X + 3来增加X 是Xvar X = 0一样,在上面被声明为内部L

3 个答案:

答案 0 :(得分: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 :(得分:1)

我们使用了远远不够完善的代码来完成对问题的解答。
我们使用了CharArray,因为Grendel似乎对Array和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
    }

简单但不优雅。似乎该代码比迭代是一个更好的计数器示例。
控制“下一个外观”可能涉及较少的代码行。控制外观似乎是错误的方向。我们可能会尝试使用关键字“何时”将当前对此问题繁忙的逻辑应用

答案 2 :(得分:0)

经过进一步研究,这里是对我们问题的部分回答 此代码仅显示如何遍历哈希映射,索引该遍历需要每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

在提出这个问题之前,我们只进行了适度的研究。我们的用具。如果有人重新开始使用Kotlin,那么第二个链接可能会更有价值。我们很少在Android开发人员页面上找到可以理解的答案。 Kotlin和Android页面对初学者更友好,并且在技术上不那么技术性。享受链接 Kotlin and Android