如果將這里的courseId改成console.next(),就會進入死循環
package?com.imooc6;
import?java.util.ArrayList;
import?java.util.Arrays;
import?java.util.List;
import?java.util.Scanner;
public?class?SetTest?{
public?List<Course>??coursesToSelect;
?????public?SetTest(){
?????coursesToSelect=new?ArrayList<Course>();
???}
?????public?void?testAdd(){ /
?????/創建一個課程對象,并通過調用Add方法,添加到備選課程List中
?????Course?cr1=new?Course("1","數據結構");
?????coursesToSelect.add(cr1);
?????Course?temp=(Course)?coursesToSelect.get(0);
?????// System.out.println("添加了課程:"+temp.id+":"+temp.name);
?????Course?cr2=new?Course("2","C語言");
?????coursesToSelect.add(0,cr2);
?????Course?temp1=(Course)?coursesToSelect.get(0);
?????// ?System.out.println("添加了課程:"+temp1.id+":"+temp1.name);
?????//list中的元素是可以重復的
?????// coursesToSelect.add(cr1);
?????// Course?temp7=(Course)?coursesToSelect.get(2);
?????// System.out.println("添加了課程:"+temp7.id+":"+temp7.name);
?????/** ?
??????*?當add添加的位置為集合的容量數值時,則直接排在集合的末尾。 ?
???????*?如果數值超出集合的容量時就會報錯,小于0也會報錯 ?
????????*/
????????Course?cr3=new?Course("3","前端測試");
????????coursesToSelect.add(2,cr3);
????????Course?temp2=(Course)?coursesToSelect.get(2);
????????// System.out.println("添加了課程:"+temp2.id+":"+temp2.name);
????????
????????//兩個addAll方法的應用
????????Course[]?course={new?Course("4","Java入門"),new?Course("5","設計技巧")};
????????//創建數組
????????coursesToSelect.addAll(Arrays.asList(course));
????????//調用Arrays的一個方法,將數組轉變為一個List
????????Course?temp3=(Course)?coursesToSelect.get(3);
????????Course?temp4=(Course)?coursesToSelect.get(4);
????????// System.out.println("添加了課程:"+temp3.id+":"+temp3.name);
????????// System.out.println("添加了課程:"+temp4.id+":"+temp4.name);
????????
????????Course[]?course1={new?Course("6","JAVA中的框架結構"),new?Course("7","架構師基礎")};
????????coursesToSelect.addAll(3,Arrays.asList(course1));
????????Course?temp5=(Course)?coursesToSelect.get(3); C
????????ourse?temp6=(Course)?coursesToSelect.get(4);
????????// System.out.println("添加了課程:"+temp5.id+":"+temp5.name);
????????// System.out.println("添加了課程:"+temp6.id+":"+temp6.name);
????????
????? }
????? /**
????? *?Set??在獲取元素時,只能用foreach()或者Iterator()方法,不能使用get()方法
????? *??????因為在其中,它是無序的,不能使用。
????? *?
????? */
????? public?void?testForEach(){
????? System.out.println("你有如下課程可以選擇(通過for?each訪問):");
????? for(Object?object:coursesToSelect){
????? Course?cr=(Course)?object;
????? System.out.println("添加了課程:"+cr.id+":"+cr.name);
????? }
????? }
????? /**
????? *?@param?args
????? */
????? public?static?void?main(String[]?args)?{
????? //?TODO?Auto-generated?method?stub
????? SetTest?st=new?SetTest();
????? st.testAdd();
????? st.testForEach();
????? //創建一個學生對象
????? Student?student=new?Student("1","小明");
????? System.out.println("歡迎學生:"+student.name+"來選課!");
????? //創建一個Scanner對象,來接受從鍵盤輸入的課程ID
????? Scanner?console=new?Scanner(System.in);
????? for(int?i=0;i<3;i++){
????? System.out.println("請輸入您選課程的ID:");
????? String?courseId=console.next();
????? for(Course?cr:st.coursesToSelect){
????? if(cr.id.equals(courseId)){//如果將這里的courseId改成console.next(),就會進入死循環
????? student.courses.add(cr);
????? /**
????? *?set中是不可重復的,不論重復添加多少次,只會留下一個對象的引用,
????? *?并且保留的是第一次添加的
????? */
????? student.courses.add(null);//set中可以添加null的,不會報錯的。但沒有意義
?????// student.courses.add(cr);
?????
????? }
????? }
????? }
????? //遍歷學生所選擇的課程
????? st.testForEachForSet(student);
????? }
????? public?void?testForEachForSet(Student?student){
?????
????? //打印輸出,學生所選擇的課程!
????? System.out.println("共選擇了"+student.courses.size()+"課程!!");
????? for(Course?cr:student.courses){
????? System.out.println("選擇的課程為:"+cr.id+":"+cr.name);
????? }
????? }
????? }如果將這里的courseId改成console.next(),就會進入死循環,為什么會出現呢,怎么理解呀??!
2020-03-02
console.next()就是獲取用戶的輸入,放在for循環下的if語句里面就只是拿當前的課程id和你的輸入進行比較,不相等就會進入下一個for循環,而不是把你的輸入和下一個課程id進行比較。