【发布时间】:2018-08-16 01:48:14
【问题描述】:
我们有一个 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 个循环。 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 不允许我们使用
L = L + 1在 While 循环和 For Next 循环中 为什么? - 这里是奇怪的部分通知我们可以通过使用
X = X + 3来增加X YESX在上面被声明为内部var X = 0和L一样
【问题讨论】:
-
这似乎是一个非常复杂的解决方案(和问题)。关于解决方案:是否有任何理由使用
HashMap而不是列表,每个元素代表您需要的 3 条数据?关于这个问题:你同时问很多事情。特别是,“Kotlin 不会让我们在 While 循环和 For Next 循环中使用 L = L + 1 为什么?”是什么意思?你得到什么错误? -
我还鼓励您删除与问题无关的所有部分(例如它是 Android 的事实,或者
onNEXT获得View作为参数。这样,您'会有更好的机会得到人们的回应 -
@marianosimone 您在所有可能的情况下都是正确的,我们将有一个由 SQLite 生成的列表。只是想测试为代码 L = L + 1 编写 For Next 循环,我们被告知参数不是表达式,并且在这种情况下只允许使用表达式 我的猜测是我们在同一行代码中混合 val 和 var 谢谢对于第二条评论建议表示赞赏