我们有一个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
问题是
L = L + 1
或For Next循环中的WHY吗?X = X + 3
来增加X
是X
和var X = 0
一样,在上面被声明为内部L
答案 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