如果將這里的courseId改成console.next(),就會進入死循環(huán)
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(){ / ?????/創(chuàng)建一個課程對象,并通過調(diào)用Add方法,添加到備選課程List中 ?????Course?cr1=new?Course("1","數(shù)據(jù)結構"); ?????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添加的位置為集合的容量數(shù)值時,則直接排在集合的末尾。 ? ???????*?如果數(shù)值超出集合的容量時就會報錯,小于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","設計技巧")}; ????????//創(chuàng)建數(shù)組 ????????coursesToSelect.addAll(Arrays.asList(course)); ????????//調(diào)用Arrays的一個方法,將數(shù)組轉(zhuǎn)變?yōu)橐粋€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(); ????? //創(chuàng)建一個學生對象 ????? Student?student=new?Student("1","小明"); ????? System.out.println("歡迎學生:"+student.name+"來選課!"); ????? //創(chuàng)建一個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(),就會進入死循環(huán) ????? 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(),就會進入死循環(huán),為什么會出現(xiàn)呢,怎么理解呀??!
2020-03-02
console.next()就是獲取用戶的輸入,放在for循環(huán)下的if語句里面就只是拿當前的課程id和你的輸入進行比較,不相等就會進入下一個for循環(huán),而不是把你的輸入和下一個課程id進行比較。