生成等宽字距字符串的算法 (二)

2014-11-24 11:22:28 · 作者: · 浏览: 6
] = zolltyRandom(orgIntArray);
int i = 0;
for(int j=0;j switch(resultArray[j]){
case 1:{
i = (int) (Math.random()*5);
strbuf.append(charsA[i]);
break;
}
case 2:{
i = (int) (Math.random()*4);
strbuf.append(charsD[i]);
break;
}
case 3:{
i = (int) (Math.random()*3);
strbuf.append(charsN[i]);
break;
}
case 4:{
i = (int) (Math.random()*2);
strbuf.append(charsF[i]);
break;
}
case 5:{
i = (int) (Math.random()*6);
strbuf.append(charsE[i]);
break;
}
}
}

return strbuf.toString();
}


/**
* 将原始数组重新随机排序(=洗牌)
*
* @param orgIntArray
* 例如{ 0, 1, 2, 3, 4, 5, 6, 7 }
* @return 排列后的数组
* @author zollty
*/
public static int[] zolltyRandom(int[] orgIntArray) {

Random rand = new Random();

int pos, temp2;

int returnValue[] = new int[orgIntArray.length];

for (int i = 0, r = orgIntArray.length; i < orgIntArray.length - 1; i++, r--) {
pos = Math.abs(rand.nextInt()) % r;

returnValue[i] = orgIntArray[pos];

// [pos]已使用,与最后那个未使用的交换
temp2 = orgIntArray[pos];
orgIntArray[pos] = orgIntArray[r - 1];
orgIntArray[r - 1] = temp2;
}

returnValue[orgIntArray.length - 1] = orgIntArray[0];

return returnValue;
}