#java #for-loop #nested-loops
#java #for-loop #вложенные циклы
Вопрос:
Я хотел бы узнать о данном for
цикле, который мне кажется странным:
for (int i = 0, j = s.length - 1; i < j; i , j--)
До сих пор я использовал цикл for с одной переменной. Однако в этом примере в одном цикле есть две переменные.
Могу ли я разделить for
цикл на два вложенных цикла?
for (int j = 0; j < s.length - 1; j--) {
for (int i = 0; i < j; i ) {
}
}
Комментарии:
1. Этот первый цикл является вполне допустимым
for
циклом. Нет никакой необходимости менять его вообще. Бьюсь об заклад, что весь Java-код казался вам странным, когда вы только начинали, не так ли? Вы также пытались изменить код Java тогда, просто потому, что это показалось вам странным? Нет, вы немного выучили Java, и это перестало выглядеть странно. То же самое здесь. Не меняйте код, потому что он выглядит странно, изучите больше Java , и он будет выглядеть нормально для вас, и код продолжит функционировать так, как он был специально написан для функционирования.
Ответ №1:
это неправильное преобразование, правильное будет:
int j = s.length - 1;
for (int i = 0; i < j; i ) {
// inside logic
j--;
}
Комментарии:
1. Обратите внимание, что это будет сложнее, если в цикле будут какие-либо
continue
инструкции, потому что thenj--
будут пропущены. Я бы посоветовал оператору освоиться с синтаксисом исходного цикла, поскольку это лучший способ его написания.
Ответ №2:
Нет.
Оригинал действует следующим образом:
sssssss
i j
sssssss
i j
sssssss
i j
sssssss
i
j
Он имеет, например, (s.length)/ 2 итерации. И перебирает одну половину с помощью i, а другую половину с помощью j.
Предлагаемая альтернатива является 2D и имеет, например, (s.длина*s.длина) / 2 итерации (и это предполагается j
вместо сломанного j--
). Он охватывает что-то вроде треугольника.
sssssss
j
ij
iij
iiij
iiiij
iiiiij
iiiiiij