第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

關(guān)于調(diào)用List,contains()方法,報空指針異常的問題。

package?imooc_java_3_6_1To8;

import?java.util.Collections;
import?java.util.List;
import?java.util.Random;

/**
?*?實現(xiàn)功能:
?*?1.創(chuàng)建List<String>,并且往其中添加10條隨機(jī)字符串
?*?2.每條字符串長度為10以內(nèi)的隨機(jī)整數(shù)
?*?3.每條字符串的每個字符都為隨機(jī)生成的字符,字符可以重復(fù)
?*?4.每條隨機(jī)字符串不可以重復(fù)
?*/
public?class?CollectionsTest?{
//	1.創(chuàng)建List<String>對象stringList,并且往其中添加10條隨機(jī)字符串
	List<String>?stringList;
	
	public?void?testStringSort(){
		//創(chuàng)建一個Random對象,用于生成隨機(jī)數(shù)
		Random?random?=?new?Random();
		//定義一個字符串,存儲所有可能出現(xiàn)的字符
		String?base?=?new?String("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
		//控制循環(huán)10次
		for(int?i?=?0;?i?<?10;?i++){
			//得到一個10以內(nèi)的隨機(jī)整數(shù),作為循環(huán)的次數(shù),控制字符串的長度,數(shù)字可以重復(fù)
			//循環(huán)得到一個隨機(jī)字符(數(shù)字or字母【大寫/小寫】),把字符組合成一個字符串
			int?stringSize?=?random.nextInt(10);
			//定義一個StringBuffer對象,存儲隨機(jī)字符串(因為StringBuffer可以變換其內(nèi)容,所以比較好)
			StringBuffer?sb?=?new?StringBuffer();
			for(int?j?=?0;?j?<?stringSize;?j++){
				//隨機(jī)獲得base字符串的一個字符的下標(biāo)
				int?index?=?random.nextInt(base.length());
				//把對應(yīng)下標(biāo)的字符添加到StringBuffer對象sb中
				sb.append(base.charAt(index));
				}//for循環(huán)結(jié)束,得到一條隨機(jī)的字符串
			
			//判斷List中是否有該字符串,若無,則添加到list中,若有,則重新循環(huán)得到一個新的字符串
			if(stringList.contains(sb))
				continue;
			else{
				//將StringBuffer類型轉(zhuǎn)換成String類型并添加到List中
				String?randomString?=?sb.toString();
				stringList.add(randomString);
				System.out.println("添加了字符串:"?+?randomString);
			}
			//10次循環(huán)結(jié)束,輸出此時的stringList
			System.out.println("---------------添加前----------------");
			for?(String?string?:?stringList)?{
				System.out.println("元素:"?+?string);
			}
			//調(diào)用Collections.sort()方法對stringList排序,并輸出排序后的stringList
			Collections.sort(stringList);
			System.out.println("---------------添加前----------------");
			for?(String?string?:?stringList)?{
				System.out.println("元素:"?+?string);
			}
		}
		
	}

	public?static?void?main(String[]?args)?{
		CollectionsTest?ct?=?new?CollectionsTest();
		ct.testStringSort();
	}

}

運行結(jié)果:

http://img1.sycdn.imooc.com//56c9dfb6000161d307890075.jpg

對應(yīng)的異常代碼(38行):

if(stringList.contains(sb))
????continue;


我在這之前調(diào)試過,sb是有內(nèi)容的,內(nèi)容是一串隨機(jī)的字符串。

然后我查看了一下contains的API,如下:

http://img1.sycdn.imooc.com//56c9e0930001b96e10850299.jpg

這里頭也提到了空指針異常。

我懷疑會報錯,是因為List對象stringList中沒有內(nèi)容,也就是滿足后半句“此列表不允許null元素”。然而這里寫著“可選”,我想知道這個“可選”是什么意思,可以讓stringList在包含null元素的情況下,調(diào)用contains()方法不會報錯?那要怎么實現(xiàn)呢?

另外,也想請教大家,API中說的,指定的元素是什么意思呢?是我傳入做比較的這個元素,還是List中已有的元素呢?

正在回答

3 回答

刻苦專研,佩服!

0 回復(fù) 有任何疑惑可以回復(fù)我~

傳上一份改好的代碼- -

package?imooc_java_3_6_1To8;

import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.List;
import?java.util.Random;

/**
?*?實現(xiàn)功能:
?*?1.創(chuàng)建List<String>,并且往其中添加10條隨機(jī)字符串
?*?2.每條字符串長度為10以內(nèi)的隨機(jī)整數(shù)
?*?3.每條字符串的每個字符都為隨機(jī)生成的字符,字符可以重復(fù)
?*?4.每條隨機(jī)字符串不可以重復(fù)
?*/
public?class?CollectionsTest?{
//	1.創(chuàng)建List<String>對象stringList,并且往其中添加10條隨機(jī)字符串
	List<String>?stringList?=?new?ArrayList<String>();
	
	public?void?testStringSort(){
		//創(chuàng)建一個Random對象,用于生成隨機(jī)數(shù)
		Random?random?=?new?Random();
		//定義一個字符串,存儲所有可能出現(xiàn)的字符
		String?base?=?new?String("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
		//控制循環(huán)10次
		for(int?i?=?0;?i?<?10;?i++){
			//得到一個10以內(nèi)的隨機(jī)整數(shù),作為循環(huán)的次數(shù),控制字符串的長度,數(shù)字可以重復(fù)
			//循環(huán)得到一個隨機(jī)字符(數(shù)字or字母【大寫/小寫】),把字符組合成一個字符串
			int?stringSize;
			
			//保證字符串至少包含一個字符
			do{
				stringSize?=?random.nextInt(10);
			}while(stringSize?<=?0);
			//定義一個StringBuffer對象,存儲隨機(jī)字符串(因為StringBuffer可以變換其內(nèi)容,所以比較好)
			StringBuffer?sb?=?new?StringBuffer();
			String?randomString;
			for(int?j?=?0;?j?<?stringSize;?j++){
				//隨機(jī)獲得base字符串的一個字符的下標(biāo)
				int?index?=?random.nextInt(base.length());
				//把對應(yīng)下標(biāo)的字符添加到StringBuffer對象sb中
				sb.append(base.charAt(index));
				}//for循環(huán)結(jié)束,得到一條隨機(jī)的字符串
			//判斷List中是否有該字符串,若無,則添加到list中,若有,則重新循環(huán)得到一個新的字符串
			/**
			?*?以下注釋部分會報空指針異常,估計是contains的原因。未知。
			?*?補(bǔ)充:開始的時候List<String>?stringList?;
			?*?并沒有初始化
			?*?加上List<String>?stringList?=?new?ArrayList<String>();即解決問題;
			?*/
			if(stringList.contains(sb))
				continue;
			else{
				//將StringBuffer類型轉(zhuǎn)換成String類型并添加到List中
				randomString?=?sb.toString();
				stringList.add(randomString);
				System.out.println("添加了字符串:"?+?randomString);
			}
			
		}
		//10次循環(huán)結(jié)束,輸出此時的stringList
		System.out.println("---------------排序前----------------");
		for?(String?string?:?stringList)?{
			System.out.println("元素:"?+?string);
		}
		//調(diào)用Collections.sort()方法對stringList排序,并輸出排序后的stringList
		Collections.sort(stringList);
		System.out.println("---------------排序后----------------");
		for?(String?string?:?stringList)?{
			System.out.println("元素:"?+?string);
		}
	}

	public?static?void?main(String[]?args)?{
		CollectionsTest?ct?=?new?CollectionsTest();
		ct.testStringSort();
	}

}


1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

l_yanlei 提問者

自問自答- -好無聊。。。話說怎么刪除自己的提問?
2016-02-22 回復(fù) 有任何疑惑可以回復(fù)我~

好吧,我又對比了一下老師做對String類型的List排序的代碼。發(fā)現(xiàn)在創(chuàng)建List<String> stringList時沒有將它實例化為ArrayList<String>();加上這部分語句,也就是:

List<String> stringList = new ArrayList<String>();

代碼就能正常運行了。傻了,忘記實例化對象了- -

不過關(guān)于contains的API中的空指針異常,還是求指教,不是很懂什么意思。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

l_yanlei 提問者

弄懂了- -所謂“指定的元素”指的是傳入的元素,也就是Contains(obj)中的obj,如果obj為null,而且List中不允許存在null這個元素時,就會拋出空指針錯誤。但是默認(rèn)是允許null這個元素的。如果想實現(xiàn)這個異常,可以手動拋出。大概是這個意思吧。
2016-02-22 回復(fù) 有任何疑惑可以回復(fù)我~
#2

sysytem

我實例化對象了了 為什么還是報錯
2017-01-18 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消
Java入門第三季
  • 參與學(xué)習(xí)       409774    人
  • 解答問題       4546    個

Java中你必須懂得常用技能,不容錯過的精彩,快來加入吧

進(jìn)入課程

關(guān)于調(diào)用List,contains()方法,報空指針異常的問題。

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號