作業(利用ASCii碼)
代碼如下:求解為什么生成的隨機字符串里有a~z意外的字符?我的random函數哪里出錯了?
//練習,隨機字符串sort方法;
public void testSort3(){
List<String> stringList2= new ArrayList<String>();
Random random = new Random();
String s = new String();
for(int i=0;i<10;i++){
do{
int s_long = s.length();
Integer k=random.nextInt(10);
s_long=k;
//調用字符串生成函數;輸入s_long取相應長度隨機字符串;
s=randomString(s_long);
}while(stringList2.contains(s));
stringList2.add(s);
}
System.out.println("----------before sort()----------");
for(String string:stringList2){
System.out.println("隨機字符串:"+string);
}
Collections.sort(stringList2);
System.out.println("----------after sort()----------");
for(String string:stringList2){
System.out.println("隨機字符串:"+string);
}
}
public String randomString(int k){
String s="";
Random r=new Random();
for(int i=0;i<k;i++){
//a~z : 97~122
s=s+(char)Math.abs(r.nextInt()%26+97);
}
return s;
}
結果如下:
2019-02-28
r.nextInt()%26+97的值不一定在97~122之間啊
改成r.nextInt(26)%26+97 就可以了
2019-06-25
我和你思路一樣利用ascii碼
for(int j=0 ;j<10;j++) {
//創建char類型的數組用于存儲十個隨機生成的字符
char[] chars = new char[10];
for(int i=0 ;i<10;i++) {
//生成一個隨機的Assic碼值
int b = ran.nextInt(125);
//判斷Asiic碼值是否位于48-57或65-90或97-122之間
//Assic碼值位于48-57或65-90或97-122之間為0-9、a-z、A-Z之間的字符
if((b>47 && b<58) || (b>64 && b<91) || (b>96&&b<123)) {
char a = (char)b;
chars[i] = a;
continue;
}
i--;
}
//將符合條件的字符數組轉換為字符串
str = String.copyValueOf(chars);
//將字符串存入集合strList
strList.add(str);