При генерации случайной позиции для слова, которое длиннее 4 символов, вы проверяете, есть ли в новой позиции также слово с более чем 4 символами.Если нет, вы продолжаете генерировать новую случайную позицию, пока не найдете ту, которая работает.
public static String[] getScramble(String text) {
Random rgen = new Random();
String[] textArray = text.split(" ");
for (int i = 0; i < textArray.length; i++) {
if( textArray[i].length() > 4) {
String temp = textArray[i];
int randPos = rgen.nextInt(textArray.length);
while( textArray[randPos].length() <= 4 ){
randPos = rgen.nextInt(textArray.length);
}
textArray[i] = textArray[randPos];
textArray[randPos] = temp;
}
}
return textArray;
}
Может возникнуть ситуация, если у вас есть только одно слово с более чем 4 символами, что означает, что бессмысленно даже пытаться их рандомизировать, и вы можете тратить много времени на генерацию случайных позиций длябезрезультатно.Чтобы оптимизировать это, вы можете сначала проверить, если у вас есть менее 2 длинных слов, и если это так, вам не нужно ничего делать.
int longWordCount = 0;
for (int i = 0; i < textArray.length; i++) {
if( textArray[i].length() > 4 )
longWordCount++;
if( longWordCount == 2 )
break;
}
if( longWordCount > 1 ) {
for (int i = 0; i < textArray.length; i++) {
if (textArray[i].length() > 4) {
String temp = textArray[i];
int randPos = rgen.nextInt(textArray.length);
while (textArray[randPos].length() <= 4) {
randPos = rgen.nextInt(textArray.length);
}
textArray[i] = textArray[randPos];
textArray[randPos] = temp;
}
}
}