请帮看看,有下面的方法产生一个随机字符,为什么第二次调用时就会死了?

ynduanlian 2012-10-18 10:17:24
想附机的产生一个字符(的串),如“A” 或“w”,但要调用多次,且为了避免重复,加了个排除strExclude,如果得到的字串在此字符串内存在,就再生成一个,直到不在strExclude串中:

private String GetRandomCharString(String strExclude){
Random randGen = null;
char[] numbersAndLetters = null;

if (randGen == null)
{
randGen = new Random();
numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
}
char randC;
String randStr="";
while(strExclude.indexOf(randStr)>0){
randC = numbersAndLetters[randGen.nextInt(61)];
randStr=String.valueOf(randC);
}
return randStr;
}
...全文
70 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwayen 2012-10-18
  • 打赏
  • 举报
回复
在进入while循环之前应该要先执行:
randC = numbersAndLetters[randGen.nextInt(61)];
randStr=String.valueOf(randC);
这两句吧,否则randStr不是一直为空串么?
VS_2010 2012-10-18
  • 打赏
  • 举报
回复
这里边存在死循环的可能性,如果你所要的随机字符串长度大于numbersAndLetters数组的长度就会出现死循环,所以要在while加一个条件

while (strExclude.indexOf(randC) > 0 && strExclude.length < numbersAndLetters.length);


[Quote=引用 2 楼 的回复:]

这个方法里没有必要声明那么多变量,可以把Random和字符数组声明在方法外进行缓存,不用每次都创建一个新对象,我帮你重新改了一下代码,你可以参考一下.

Java code
import java.util.Random;

public class Demo {

public static void main(String[] args) {
Strin……
[/Quote]
VS_2010 2012-10-18
  • 打赏
  • 举报
回复
这个方法里没有必要声明那么多变量,可以把Random和字符数组声明在方法外进行缓存,不用每次都创建一个新对象,我帮你重新改了一下代码,你可以参考一下.

import java.util.Random;

public class Demo {

public static void main(String[] args) {
String str = "";
for(int i = 0; i < 15; i++) {
str += GetRandomCharString(str);
}
System.out.println(str);
}
private static Random randGen = new Random();;
private static char[] numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
.toCharArray();
public static String GetRandomCharString(String strExclude) {
char randC;
do {
randC = numbersAndLetters[randGen.nextInt(61)];
} while (strExclude.indexOf(randC) > 0);
return String.valueOf(randC);
}
}
VS_2010 2012-10-18
  • 打赏
  • 举报
回复
把while部分换成do...while就好了,你现在的写法,while循环是永远也不会执行的.
下面是代码.

public static String GetRandomCharString(String strExclude) {
Random randGen = null;
char[] numbersAndLetters = null;

if (randGen == null) {
randGen = new Random();
numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
.toCharArray();
}
char randC;
String randStr = "";
do {
randC = numbersAndLetters[randGen.nextInt(61)];
randStr = String.valueOf(randC);
} while (strExclude.indexOf(randStr) > 0);
return randStr;
}

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧