我是一名Java初學者,正在從書中做練習。任務是編寫一個靜態方法,該方法將一個字符串數組作爲參數,並以隨機順序返回字符串的混亂版本。要創建您必須使用以下的隨機數:混亂字符串 - 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;
}
這並不工作,但它似乎很BL ** DY長篇大論的東西那麼簡單。任何人都可以改進呢?任何更簡單的方法來執行這樣的任務,堅持問題中提到的約束條件?
編輯:費希爾耶茨洗牌:
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]);
}
}
一個偉大的一段代碼,並遠遠超過我的答案更有效。謝謝。
@ user559142:這比我的答案要好。 1+(我也喜歡熵部分)。 – 2011-05-29 21:37:28