package net.test; import java.util.*; public class Stringlist { String str; public void Addlist(){ List<String> po=new ArrayList<String>(); int y; Random random=new Random(); y=random.nextInt(9)+1; for (int i=0;i<10;i++){ StringBuffer str=new StringBuffer(); for (int j=0;j<y;j++){ int x; x=random.nextInt(75)+48; if (x>57&&x<65||x>90&&x<97){ continue; } char m=(char)x; str.append(m); } po.add(str.toString()); } System.out.println("----------排序前---------"); for (String obj:po){ System.out.println(obj); } System.out.println("----------排序后---------"); Collections.sort(po); for (String obj:po){ System.out.println(obj); } } public static void main(String[] args){ Stringlist stringlist=new Stringlist(); stringlist.Addlist(); } }
我是这样写的,也是用ASCII码值转换。代码放下面了。
用ASCII码值不如用 一个串里包含所有大小写字母后再随机,我看见这个课有人这样写
你的这个代码产生的串的长度是一样的,而且感觉你判断那有问题,要不是大小写字母,就i++进行下一次循环,x重新赋值,一直到大小写字母的时候在往下进行,那要是恰巧生成x的时候没有一个是在大小写字母之间的,那list里面就没有值啊,而且 x = random.nextInt(75)+48,为啥要在0-122之间生成一个随机数??以上纯属个人分析。
/**
* 随机生成10个字符串:这些字符串长度可以不同,字符可以重复,但是不能有两个相同的字符串 然后对随机生成的10个字符串排序,要求输出排序前与排序后的列表序列
*/
public void StringSort2() {
Random r = new Random();
int[] pool = new int[3];
for (int j = 0; j < 10; j++) {
String str = new String();
do {
/* 长度随机 */
int lengthRand = r.nextInt(10) + 1; // 产生1-10(包括10)之间的随机数
/* 字符随机 */
for (int i = 0; i < lengthRand; i++) {
int a = (int)(r.nextDouble() * 26) + 97; // 小写字母ASCII码值序列
int b = (int)(r.nextDouble() * 26) + 65; // 大写字母ASCII码值序列
int c = r.nextInt(10); // 0-9的数字
pool[0] = a;
pool[1] = b;
pool[2] = c;
int temp = pool[r.nextInt(3)];
if (temp > 9) {
char temps = (char) temp;
str = str+temps;
} else {
str = str+temp;
}
}
} while (stringSort.contains(str));
stringSort.add(str);
System.out.println("添加了字符串"+str);
}
System.out.println("排序前:");
for (String str2:stringSort) {
System.out.println(str2);
}
Collections.sort(stringSort);
System.out.println("排序后:");
for (String str2:stringSort) {
System.out.println(str2);
}
}