Попытка визуально увидеть перестановку элементов в массиве, но не может - PullRequest
0 голосов
/ 07 февраля 2019

Я заменяю элементы в массиве на месте, что успешно происходит с этим кодом.

Однако я столкнулся с проблемой.Я просматривал Интернет и читал много мест, где мы должны читать = справа налево (то есть arr[i] = arr[j]; и arr[j] = temp;.

Я пытаюсь отследить это таким образом, нокажется, по какой-то причине мне это не имеет смысла. Я также пытался прочитать знак = слева направо, но для меня это все еще не имеет смысла.

Может кто-нибудь, пожалуйста, наглядно покажет мне, что происходитвнутри для замены цикла?

Вот мой код:

public class HelloWorld {

public static void main(String []args){
    int[] arr = {1,2,3,4,5}; 
    swap(arr);
}

public static void swap(int[] arr) {
    for(int i = 0; i < arr.length; i++) {
        for(int j = i + 1; j < arr.length; j++) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    for(int i = 0; i < arr.length; i++) {
        System.out.print(arr[i]);
    }
   }
}

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Скажите arr[i] - x, arr[j] - y и temp - как есть.Вот последовательность:

  1. Назначьте значение x для temp
  2. Назначьте значение y для x

На этом этапе x имеет значение y, а его первоначальное значение перезаписывается.

Назначьте исходное значение x, которое сохраняется в temp, на y.
0 голосов
/ 07 февраля 2019

Сначала поймите, что «число связано с каждым элементом в массиве. Элемент - это место, где хранятся ваши данные, в данном случае целое число.
Ваш массив {1, 2, 3, 4, 5}
элемент 0 ^ ^ ^
элемент 1 ^ ^
элемент 2 ^
И т. Д.

int temp = arr[i], поэтому мы знаем, что i = 0 и элемент 0 в массиверавно 1, так что temp равен 1

arr[i] = arr[j] мы знаем i = 0 (нулевой элемент в массиве) & j = 1 (первый элемент в массиве), поэтому мы собираемся установить нулевой элемент в массиве на любойлежит в первом элементе. Таким образом, в этом случае 2 лежит в первом элементе, таким образом, ваш массив становится. {2, 2, 3, 4, 5}

Поскольку temp по-прежнему содержит тот «1», который был изначально вмассив, в котором мы устанавливаем первый элемент в массиве на «1». Короче говоря, 2 становится 0.

Каждый раз, когда цикл запускается, i и j увеличиваются на 1, чем просто следует тому же процессу.

0 голосов
/ 07 февраля 2019

Хорошо, происходит следующее: вы меняете i -й элемент массива arr на i + 1 -ый (= j -й) элемент.Вы делаете это, присваивая значение arr[i] временной переменной temp, а затем присваивая это значение arr[j].Вы должны сделать этот дополнительный шаг, потому что если бы вы просто сделали следующее:

arr[i] = arr[j];
arr[j] = arr[i];

Вы бы присвоили значение от arr[j] до arr[i], а затем присвоили arr[i] (который имеет значение от arr[j]) до arr[j], поэтому он просто остался бы неизменным все время.

Таким образом, вам нужно прочитать оператор присваивания =, поскольку «значение справа - это новое значение слева», или «значение справа присваивается переменной слева», если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...