如果将这里的courseId改成console.next(),就会进入死循环

来源:4-11 学生选课---通过 Set 集合管理课程

qq_慕神2245698

2020-02-23 15:27

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(),就会进入死循环,为什么会出现呢,怎么理解呀!!

写回答 关注

1回答

  • 饼盐
    2020-03-02 12:34:03

    console.next()就是获取用户的输入,放在for循环下的if语句里面就只是拿当前的课程id和你的输入进行比较,不相等就会进入下一个for循环,而不是把你的输入和下一个课程id进行比较。

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题