Я новичок в Java и делаю упражнение из книги.Задача состоит в том, чтобы написать статический метод, который принимает в качестве аргумента массив строк и возвращает перемешанную версию строки в случайном порядке.Чтобы создать случайное число, вы должны использовать следующее:
import java.util.Random;
Random r = new Random();
int rand = r.nextInt();
Мой ответ таков:
private static String[] jumble(String[] arr){
String [] jumbled = new String[arr.length];
int [] chosen = new int [arr.length];
Random r = new Random();
int rand = r.nextInt(arr.length);
chosen[0] = rand;
jumbled[0] = arr[rand];
for(int i = 1; i < arr.length; i++){
while(checkIfChosen(chosen, rand, i)){
rand = r.nextInt(arr.length);
}
chosen[i] = rand;
jumbled[i] = arr[rand];
}
print(jumbled);
return jumbled;
}
private static void print(String[]arr){
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
private static boolean checkIfChosen(int[] arr, int a, int ind){
for(int i = 0; i < ind; i++){
if(arr[i]==a){
return true;
}
}
return false;
}
Это работает, но кажется, что что-то слишком долготак просто.Кто-нибудь может улучшить это?Есть ли более простые способы реализовать такую задачу, следуя ограничениям, упомянутым в вопросе?
РЕДАКТИРОВАТЬ: С Фишером Йейтсом Перемешать:
public static void main(String[] args) {
String [] original = {"Hello", "How", "Are", "You"};
jumble(original);
}
private static String[] jumble(String[] arr){
Random r = new Random();
for(int i = arr.length-1; i > 0; i--){
int rand = r.nextInt(i);
String temp = arr[i];
arr[i] = arr[rand];
arr[rand] = temp;
}
print(arr);
return arr;
}
private static void print(String[]arr){
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
Отличный кусок кода и гораздо более эффективный, чем мойответ.Спасибо.