我试图随机洗牌。每次我尝试测试代码时,它基本上什么都不做,并且不会结束。我想知道我到底错过了什么或做错了什么。
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);
}
}
答案 0 :(得分:1)
错字!
您永远不会更新在循环条件中使用的head
。
答案 1 :(得分: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);
}
}