课堂作业源码,请指教。

来源:6-5 应用 Collections.sort() 实现 List 排序

蔚然成麟er

2017-03-03 12:29

	/**
	 * 生成随机字符串并排序
	 * @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回答

  • 阿莫林西
    2017-03-04 15:52:11
    已采纳

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

  • 深海提督4323794
    2017-03-16 16:45:11

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

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

    蔚然成麟er

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

    2017-03-16 21:40:40

    共 2 条回复 >

  • 蔚然成麟er
    2017-03-03 12:38:01

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

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409769 学习 · 4543 问题

查看课程

相似问题