Java - понимание логики реверса в массиве - PullRequest
0 голосов
/ 12 марта 2019

У меня есть класс динамической строки, который имеет массив символов text, и у него есть метод reverse(), который может инвертировать содержимое массива.

Но я не понимаю логику работы алгоритма.Не могли бы вы пройтись по коду?

public void reverse() {
  char tmp;
    for(int i=0; i<length/2; i++) {
      tmp = text[i];
      text[i] = text[length-1-i];
      text[length-1-i] = tmp;
    }
 } 

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Давайте возьмем строку и попробуем ее перевернуть. Строка "кодер"

length = длина строки = 5 (в данном случае)

length/2 = 5/2 = 2 (не будет 2,5, так как мы делим два целых числа) Таким образом, цикл for идет от 0 до 2 (0,1, НЕ 2)

Когда i = 0:

temp = 'c' text[0] теперь будет содержать text[5 - 1 - 0]

так что теперь текст «Родер» (промежуточный ответ)

text[4] теперь будет держать 'c' Так что теперь текст «Родек»

Когда i = 1:

temp = 'o' text[1] теперь будет содержать text[5 - 1 - 1]

так что теперь текст 'redec' (промежуточный ответ)

text[3] теперь будет удерживать 'o'

Так что теперь текст «redoc»

Причина цикла for до length/2 состоит в том, что мы меняем символы с двух концов и останавливаемся в середине.

Надеюсь, это поможет. Попробуйте взять более длинную строку сейчас и выполните те же шаги.

0 голосов
/ 12 марта 2019

Вы должны подумать и отладить все шаги в цикле, как это

Char[] text ='abcd'
text.length = 4

первый шаг,

temp = 'a' 
text[0] = text[3] // text[0] = 'd'
text[3] = temp // text[3] = 'a'
// your text = 'dbca'

второй шаг,

temp = 'b'
text[1] = 'c'
text[2] = 'b'
// your text = 'dcba'

Вы можете найти перевернутый текст в два раза -> размер / 2

...