3 строки только о для l oop, очень запутанный - PullRequest
0 голосов
/ 30 января 2020

почему вывод 22212345?

Разве это не должно быть: "43212345", потому что, когда мы продолжаем добавлять первые значения строки в предыдущую версию строки.

Таким образом, каждый раз, когда мы увеличиваем k, мы идем от 2,3,4 и добавляем его в предыдущую версию.

почему вывод 22212345?

String str = "12345";

for (int k = 1; k <= 3; k++) 
            str = str.charAt(k) + str;

Ответы [ 2 ]

3 голосов
/ 30 января 2020

Таким образом, каждый раз, когда мы увеличиваем k, мы идем от 2,3,4 и добавляем его в предыдущую версию.

Нет, это не так. Вы префикс str с символом в k.

Итак, если мы получим ручку, лист бумаги и письменный стол, проверьте код (почему люди больше не проверяют стол ?), вы получите посмотрим, что на самом деле происходит ...

+---+-----------+---------+-----------------------+
| k | char at k |   str   | result (charAt + str) |
+---+-----------+---------+-----------------------+
| 1 |         2 |   12345 |                212345 |
| 2 |         2 |  212345 |               2212345 |
| 3 |         2 | 2212345 |              22212345 |
+---+-----------+---------+-----------------------+
1 голос
/ 30 января 2020

Это происходит в каждой итерации:

first_loop_state: {
    k : 1
    initial_str : "12345";
    str.charAt(k) : '2'
    final_str : "212345"
}
second_loop_state:{
    k : 2
    initial_str : "212345";
    str.charAt(k) : '2'
    final_str : "2212345"
}
 third_loop_state:{
    k : 3
    initial str : "2212345";
    str.charAt(k) : '2'
    final_str : "22212345"
}
...