Могу ли я разделить этот цикл for с двумя переменными на два вложенных цикла?

#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 инструкции, потому что then j-- будут пропущены. Я бы посоветовал оператору освоиться с синтаксисом исходного цикла, поскольку это лучший способ его написания.

Ответ №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