亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

課堂作業源碼,請指教。

	/**
	?*?生成隨機字符串并排序
	?*?@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
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號