问答详情
源自:6-5 应用 Collections.sort() 实现 List 排序

课堂作业源码,请指教。

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


提问者:蔚然成麟er 2017-03-03 12:29

个回答

  • 阿莫林西
    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
    2017-03-03 12:38:01

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