Переключение элементов в массиве char на соответствующие позиции в массиве int java - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь переключить элементы в массиве букв на соответствующие позиции в массиве позиций. Элементы меняются местами, но не в правильное положение. Я делаю это совершенно неправильно или в моей логи c?

public class Words
{
    public static void main (String args[])
    {
        char letters[] = {'l', 'o', 'e', 'h', 'l'};
        int positions[] = {2, 4, 1, 0, 3};

        int limit1 = letters.length;
        int temp1;
        char temp2;
        for(int i = 0; i < letters.length; i++)
        {
            limit1--;
            for(int j = 0; j < limit1; j++)
            {
                temp1 = positions[j];
                temp2 = letters[temp1];
                letters[temp1] = letters[j];
                letters[j] = temp2;
            }
        }
        for(int i = 0; i < letters.length; i++)
        {
            System.out.print(letters[i] + " ");
        }
    }
}

просто проблема

Ответы [ 3 ]

1 голос
/ 29 марта 2020

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

char[] letters = {'l', 'o', 'e', 'h', 'l'};
int[] positions = {2, 4, 1, 0, 3};

char[] result = new char[letters.length];
for (int i = 0; i < letters.length; i++)
    result[positions[i]] = letters[i];

System.out.println(result);

Вывод

hello

Для решения на месте подойдет следующее. Вывод тот же, что и выше.

char letters[] = {'l', 'o', 'e', 'h', 'l'};
int positions[] = {2, 4, 1, 0, 3};

for (int i = 0, j; i < letters.length; i++) {
    while ((j = positions[i]) != i) {
        char tempLetter = letters[i];
        letters[i] = letters[j];
        letters[j] = tempLetter;
        int tempPosition = positions[i];
        positions[i] = positions[j];
        positions[j] = tempPosition;
    }
}

System.out.println(letters);

Это можно легко записать, используя только один l oop.

for (int i = 0, j; i < letters.length; ) {
    if ((j = positions[i]) == i) {
        i++;
    } else {
        char tempLetter = letters[i];
        letters[i] = letters[j];
        letters[j] = tempLetter;
        int tempPosition = positions[i];
        positions[i] = positions[j];
        positions[j] = tempPosition;
    }
}
0 голосов
/ 29 марта 2020

Вопрос решен, есть более простой способ, где вы создаете массив и присваиваете ему элементы в заданной позиции. Это гораздо более простой способ, идея дана { ссылка }

public class Words
{
    public static void main (String args[])
    {
        char letters[] = {'l', 'o', 'e', 'h', 'l'};
        int positions[] = {2, 4, 1, 0, 3};

        char[] array = new char [letters.length];
        int limit1 = letters.length;
        int temp1;
        char temp2;

        for(int i = 0; i < letters.length; i++)
        {
            temp2 = letters[i];
            temp1 = positions[i];
            array[temp1] = temp2;
        }
        for(int i = 0; i < letters.length; i++)
        {
            System.out.print(array[i]);
        }
    }
}
0 голосов
/ 29 марта 2020

Ваш код неверен:

 ...
 temp2 = letters[temp1]; // temp2 is a letter now 
 ...
 letters[temp2] = letters[j]; // the index you are using is a unicode char
...