为了账号安全,请及时绑定邮箱和手机立即绑定

课堂作业源码,请指教。

	/**
	 * 生成随机字符串并排序
	 * @param args
	 */
	public void testStringSort(){
		String str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	
		List<String> stringList = new ArrayList<String>();
		for(int i = 0;i < 10;i++){
			StringBuilder sb = new StringBuilder();//创建一个新的新的字符串对象
//        	第一次while循环用来检查是否产生相同的字符串,如果相同,重新执行,不同则添加到stringList中
			do{
				int stringLength = random.nextInt(10);
				//确保随机产生的数字不为0,也就是确保字符串的长度不为0
				if(stringLength == 0){
					continue;
					} else {
						for(int j = 0;j < stringLength;j++){
							int num = random.nextInt(str.length());//随机产生一个str的索引位置
							sb.append(str.charAt(num));//将str在num位置上的字符增加到sb字符串对象中
							}
						}
				}while(stringList.contains(sb.toString()));
			stringList.add(sb.toString());
			System.out.println("成功添加字符串: " + sb.toString());
			}
		System.out.println("------------排序前-----------");
		for(String string:stringList)
			System.out.println("包含字符串:"+string);
		Collections.sort(stringList);
		System.out.println("------------排序后-----------");
		for(String string:stringList)
			System.out.println("包含字符串:"+string);
		}


正在回答

3 回答

当stringLength等于0的时候,执行continue,然后判断循环条件,条件为假,循环结束,空串被添加到List中。建议修改方法:在条件中加一个判断。while (stringList.contains(sb.toString())||sb.toString().equals(""))。当List中不存在此字符串或者sb为空串的时候执行循环。

1 回复 有任何疑惑可以回复我~

int num = random.nextInt(str.length());这里有问题

应该把str.length()改为str.length()-1;    charAt第一个数对应的是0而不是1

0 回复 有任何疑惑可以回复我~
#1

蔚然成麟er 提问者

不对啊,有时候会出现StringIndexOutOfBoundsException这个异常
2017-03-16 回复 有任何疑惑可以回复我~
#2

蔚然成麟er 提问者

还是阿莫西林的方法好使! 在API文档中是这样解释的: public int nextInt()返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。nextInt 的常规协定是,伪随机地生成并返回一个 int 值。所有 232 个可能 int 值的生成概率(大致)相同。 我写了两行代码测试的过程中,发现num可以取到0,也就是charAt()能取到字符串的第0个值。 多谢。
2017-03-16 回复 有任何疑惑可以回复我~

运行的过程中发现生成的字符串有空的情况,哪里出现BUG了?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

课堂作业源码,请指教。

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号