0

リストをランダムにシャッフルしようとしています。コードをテストしようとするたびに、本質的に何もせず、終了しません。私は正確に何が欠けているのか、間違っているのか疑問に思っていました。

public static ListElement shuffle(ListElement head){
    int n= ListUtils.getLength(head);
    ListElement head2= null;
    while( head != null) {  
        int random = (int) Math.random() *  n;
        for(int i=0;i<random;i++){
            ListElement list= new ListElement(); 
            list=getItem(head2,n);
            list.getNext();
            head2=list;

        }
    }
    return head2;       
}

GetItem

public static ListElement getItem(ListElement head, int n){
    if(n == 0){                 
        return head;            
    }else if(head == null){     
        return null;
    }else{                      
        return getItem(head.getNext(),n-1);
    }
}
4

2 に答える 2

1

打ち間違え!headループ条件で使用する を更新することはありません。

于 2012-07-13T02:10:39.217 に答える
1

for ループで getItem メソッドが何をするのかわかりません。

Math.random() を使用する場合の別の解決策は、リスト全体を調べて、リスト内で交換する各要素のランダム インデックスを生成することです。

public void randomize(List<String> myList){
  int n= myList.size();
  for(int i; i < n; i++){
    int randIdx = (int) Math.random() *  n;
    swap(myList, i, randIdx);
  }
}

private void swap(List<String> list, int idx1, int idx2){
  if(idx1 != idx2){ //don't do swap if the indexes to swap between are the same - skip it.
    String tmp = list.get(idx1);
    list.set(idx1, list.get(idx2));
    list.set(idx2, tmp);
  }
}
于 2012-07-13T02:29:58.810 に答える