package?com.imooc.Map;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.Map.Entry;
import?java.util.Scanner;
import?java.util.Set;
import?com.imooc.collection.Student;
public?class?MapTest?{
public?Map<String,Student>students;
/*
?*?在構(gòu)造器中初始化students屬性
?*/
public?MapTest(){
this.students=new?HashMap();
}
/*
?*?添加學(xué)生:
?*?首先檢查是否被占用,如果被占用,輸出提示信息
?*?如若沒(méi)有,將該學(xué)生信息輸入到學(xué)生的屬性中,并打印出學(xué)生信息
?*/
public?void?TestPut(){
int?i=0;
while(i<3){//此處用while循環(huán)更加合適?。?!
System.out.println("請(qǐng)輸入學(xué)號(hào):");
Scanner?input=new?Scanner(System.in);
String?id=input.next();
Student?newStudent=students.get(id);
if(newStudent==null){
System.out.println("請(qǐng)輸入姓名:");
String?name=input.next();
//創(chuàng)建學(xué)生對(duì)象
Student?a=new?Student(id,name);
students.put(id,?a);
System.out.println("成功添加學(xué)生"+students.get(id).name);
i++;
}else{
System.out.println("您的id已被占用!");
continue;
}??
}
}
public?void?testKeySet(){
//通過(guò)keySet方法,返回Map中的所有"鍵"的Set集合
Set<String>?keySet=students.keySet();
//遍歷keySet,取得每個(gè)key值,再調(diào)用get方法取得每個(gè)鍵對(duì)應(yīng)的value
for(String?stuID:keySet){
Student?st=students.get(stuID);
System.out.println(st.name);
}
}
/*
?*?刪除Map中的映射
?*/
public?void?testRemove(){
System.out.println("請(qǐng)輸入要?jiǎng)h除的id:");
while(true){
Scanner?input=new?Scanner(System.in);
String?id=input.next();
Student?st=students.get(id);
if(st==null){
System.out.println("您輸入的id不存在,請(qǐng)重新輸入:");
continue;
}
students.remove(id);
System.out.println("已經(jīng)成功刪除"+st.name);
break;
}
}
/*
?*?通過(guò)entrySet方法遍歷Map
?*/
public?void?testEntrySet(){
System.out.println("總共有"+students.size()+"個(gè)學(xué)生");
//通過(guò)entrySet方法返回所有的鍵值對(duì)
Set<Entry<String,?Student>>?entrySet=students.entrySet();
for(Entry?es:entrySet){
System.out.println("key值:"+es.getKey());
System.out.println("Value值:"+es.getValue());
}
}
/*
?*?利用put方法修改Map中的已有映射
?*/
public?void?testModify(){
????while(true){
System.out.println("請(qǐng)輸入要修改的學(xué)生id:");
Scanner?input=new?Scanner(System.in);
String?ID=input.next();
Student?nameNow=students.get(ID);
if(nameNow==null){
System.out.println("你輸入的ID不存在,請(qǐng)重新輸入:");
????continue;
}else{
????System.out.println("要修改的學(xué)生姓名為:"+nameNow.name);
????System.out.println("請(qǐng)輸入新的學(xué)生名字:");
????String?nameNew=input.next();
????Student?st=new?Student(ID,nameNew);
????students.put(ID,?st);
????System.out.println("id為"+ID+"的學(xué)生姓名成功修改為"+nameNew);
????break;
}
????
????}
}
public?static?void?main(String[]?args){
?????????MapTest?mt=new?MapTest();
?????????mt.TestPut();
?????????mt.testKeySet();
?????????mt.testRemove();
?????????mt.testModify();
?????????mt.testEntrySet();
}
}
2017-02-17
可以去掉.
求采納
2017-03-30
額,看到這評(píng)論想補(bǔ)充下,其實(shí)這段的需求的目的是相對(duì)簡(jiǎn)單的所以去掉了不影響結(jié)果,只是單純的做了個(gè)輸入修改的判斷,但是在復(fù)雜的業(yè)務(wù)中,用這個(gè)while(true)這種的死循環(huán),嚴(yán)謹(jǐn)?shù)倪壿嬈鋵?shí)是不能去掉的,因?yàn)槟闳サ袅巳绻鉯f判斷后還有邏輯就會(huì)執(zhí)行下去(比如你在if后還有邏輯操作最后break不是在else中break),如果沒(méi)有continue結(jié)束本次循環(huán),邏輯就會(huì)繼續(xù)往下走(直接break跳出循環(huán)),很容易造成錯(cuò)誤,業(yè)務(wù)簡(jiǎn)單但是這里老師寫(xiě)的邏輯還是比較嚴(yán)謹(jǐn)?shù)?,初學(xué)最重要的是代碼規(guī)范邏輯嚴(yán)謹(jǐn),否則日后遍地踩坑啊~~~應(yīng)該采納我們這種善良詳細(xì)的人,哈哈~~~
2017-02-18
沒(méi)關(guān)系的,以下是運(yùn)行結(jié)果
2017-02-17
不能去掉啊!
if(student==null){
?? ??? ??? ??? ?System.out.println("該ID不存在,請(qǐng)重新輸入!");
?? ??? ??? ??? ?continue;
這個(gè)continue是用來(lái)跳轉(zhuǎn)循環(huán)的。
你說(shuō)你試了下刪掉也可以正常運(yùn)行,這句話(huà)半對(duì)半錯(cuò),因?yàn)樯厦娴膇f語(yǔ)句是用來(lái)判斷輸入的ID是否存在的,就可能會(huì)存在也可能不存在,你說(shuō)的正常運(yùn)行是所輸入的ID是存在的。
if判斷出來(lái)當(dāng)輸入的ID不存在的時(shí)候所以用continue來(lái)結(jié)束循環(huán),并且返回去重新執(zhí)行循環(huán),也就是讓你重新輸入ID