Как я могу заставить метод shuffler перемешивать только определенные индексы в массиве?Пока не тасуя индексы которые я хочу оставить прежними - PullRequest
0 голосов
/ 11 декабря 2018

Моя проблема заключается в следующем:

    char [] letters = {' ', 'a', ' ', 'b', ' ', 'c'};

    for(int i = 0; i < letters.length; i ++) {
        int random = (int) (Math.random()* letters.length);

        char temp = letters[i];
        letters [i] = letters [random];
        letters [random] = temp;

    }

Этот метод перемешивает массив, очень хорошо;однако я хотел бы, чтобы и метод shuffle, и метод Math.random игнорировали пробелы и только индексы случайного числа, имеющие буквенное значение.Для дальнейшего объяснения: я бы хотел, чтобы выходные данные массива букв имели все пробелы с тем же индексом, что и изначально, при этом позволяя заменять только те индексы, которые содержали букву.Таким образом, пример случайного допустимого выхода массива букв после прохождения этого метода будет выглядеть примерно так:

['', 'b', '', 'c', '', 'a ']

или, может быть, даже

[' ',' c ',' ',' a ',' ',' b ']

любая помощь в том, какЯ могу сделать это просто фантастически ... Я попробовал все варианты циклов for, while и if, пытаясь ограничить границы метода Math.random только для индексов, содержащих букву, и для цикла for.Но я ничего не придумала.Это меня победило.Большое спасибо заранее всем, кто мог бы помочь мне и немного объяснить.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Просто пропустите пробельные индексы:

char [] letters = {' ', 'a', ' ', 'b', ' ', 'c'};

for(int i = 0; i < letters.length; i++) {
    int random = (int) (Math.random()* letters.length);

    if (letters[random] == ' ' || letters[i] == ' ') continue; // here

    char temp = letters[i];
    letters [i] = letters [random];
    letters [random] = temp;
}
0 голосов
/ 11 декабря 2018

Используйте следующую логику:

char[] letters = { ' ', 'a', ' ', 'b', ' ', 'c', ' ', 'd' };

for (int i = 0; i < letters.length; i++) {
    int random = (int) (Math.random() * letters.length);

    // observe this
    if (!Character.isWhitespace(letters[random]) && !Character.isWhitespace(letters[i])) { 
        char temp = letters[i];
        letters[i] = letters[random];
        letters[random] = temp;
    }

}

Объяснение:

  • Вы можете добавить простое условие if, чтобы проверить, являются ли оба элемента (то есть letters[random] и * 1009).*) поменяться местами не являются пробелами .
...