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

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

SetTest.java中的add方法有問題

https://img1.sycdn.imooc.com//5cce5827000197fe10300955.jpghttps://img1.sycdn.imooc.com//5cce58a90001f67a12580620.jpg跟著老師打的代碼,從ListTest.java復制過來的testAdd()方法后,除了注釋system.println.out輸出語句,我還注掉了第35行,不然運行后控制臺報錯,可是我看老師沒有注釋這一行!只注釋了輸出語句,為啥呀?這是第一個問題,還有第二個問題,就是我添加的課程,明明是先寫的離散數學和匯編語言,后寫的高等數學和大學英雄,可是為什么testForEach()方法遍歷后,控制臺的信息離散數學和匯編語言是排在高等數學和大學英語后面的呢?麻煩會的小伙伴講一講哦。謝謝

正在回答

4 回答

coursesToSelect.addAll(2,?Arrays.asList(course2));下標你標的是2

0 回復 有任何疑惑可以回復我~

你添加了4個,到那時這個數字和數組一樣都是從0開始的,所以最大的才3

0 回復 有任何疑惑可以回復我~
package?imooc.imooc.collection;import?java.util.HashSet;import?java.util.Set;/**?*?學生類?*?*/public?class?Student?{	private?String?id;	private?String?name;	public?Set<Course>?courses;	public?Student(String?id,?String?name)?{		this.id?=?id;		this.name?=?name;		//?Set接口,無序不重復		this.courses?=?new?HashSet<Course>();	}	public?String?getId()?{		return?id;	}	public?void?setId(String?id)?{		this.id?=?id;	}	public?String?getName()?{		return?name;	}	public?void?setName(String?name)?{		this.name?=?name;	}	public?Set?getCourses()?{		return?courses;	}	public?void?setCourses(Set?courses)?{		this.courses?=?courses;	}}
package?imooc.imooc.collection;/**?*?課程類?*?*/public?class?Course?{	private?String?id;	private?String?name;	public?String?getId()?{		return?id;	}	public?void?setId(String?id)?{		this.id?=?id;	}	public?String?getName()?{		return?name;	}	public?void?setName(String?name)?{		this.name?=?name;	}	public?Course(String?id,?String?name)?{		this.id?=?id;		this.name?=?name;	}	public?Course()?{	}}
package?imooc.imooc.collection;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?cr2?=?new?Course("2",?"C語言");		coursesToSelect.add(0,?cr2);		Course[]?course?=?{?new?Course("3",?"離散數學"),?new?Course("4",?"匯編語言")?};		coursesToSelect.addAll(Arrays.asList(course));		Course[]?course2?=?{?new?Course("5",?"高等數學"),?new?Course("6",?"大學英語")?};		coursesToSelect.addAll(2,?Arrays.asList(course2));	}	public?void?testForeach()?{		for?(Object?obj?:?coursesToSelect)?{			Course?cr?=?(Course)?obj;			System.out.println("課程:"?+?cr.getId()?+?":"?+?cr.getName());		}	}	public?void?testForEachForSet(Student?student)?{		System.out.println("共選擇了"?+?student.courses.size()?+?"門課程");		//?打印輸出,學生所選的課程!		for?(Course?cr?:?student.courses)?{			System.out.println("選了課程:"?+?cr.getId()?+?":"?+?cr.getName());		}	}	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.getName()?+?"選課!");		//?創建一個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.getId().equals(courseID))?{					student.courses.add(cr);					/**					*?Set中,添加某個對象,最終只保留一個該對象(的引用)?Set中,可以添加null					*?Set中,可以添加null?					*/					//student.courses.add(cr);				}			}		}		//?打印輸出,學生所選的課程!		st.testForEachForSet(student);	}}


0 回復 有任何疑惑可以回復我~

數組下標越界了,0~3,位置是0,1,2,3,一共四個,哪有4,只有到3

0 回復 有任何疑惑可以回復我~
#1

觀小呆 提問者

哦哦。這個我知道了,但是我并沒有看到老師改了這里,難道是偷偷的改掉了???還有!我并沒用到set的時候,我只是把課程放進了list中,然后遍歷,那么為什么遍歷是無序的?怎么不是按照我放入list中的代碼順序遍歷出來的呢?
2019-05-05 回復 有任何疑惑可以回復我~
#2

AinyG 回復 觀小呆 提問者

程序放出來,不然不知道是什么問題
2019-05-05 回復 有任何疑惑可以回復我~
#3

觀小呆 提問者 回復 AinyG

代碼是這樣的,好奇怪,上傳代碼不能格式化一下。。。麻煩幫忙看一下了哦,不過我的代碼應該是跟老師的一樣的,老師的foreach輸出課程順序也不是按照存入課程的順序位置輸出的,不理解。。
2019-05-09 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

SetTest.java中的add方法有問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

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