package com.dh.collection2;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
/**
* Map(key(不可重复)-value) 实现添加学生
*
*/
public class MapTest {
public Map<String,Student> students; //泛型,key是String,value是Student
public MapTest() { //构造器初始化students
this.students=new HashMap<String,Student>();
}
/*
* put添加学生: 判断学生ID是否被占用(避免重复添加),若未重复则输入姓名,创建新学生对象,添加到students
*/
public void testPut() {
Scanner sc=new Scanner(System.in);
for(int i=0;i<3;i++) { //输入三个学生
System.out.println("请输入学生ID:");
String ID=sc.nextLine();
Student st=students.get(ID); //取得这个ID,比较输入的ID,判断是否重复
if(st==null) {
//提示输入姓名
System.out.println("请输入学生姓名:");
String name=sc.nextLine();
Student newStudent=new Student(ID,name);
students.put(ID, newStudent);
System.out.println("成功添加学生:"+students.get(ID).name);
}else {
System.out.println("该学生ID已被占用!");
continue;
}
}
}
/*
* 测试并利用keySet方法,返回Map中所有key的set集合
*/
public void testKeySet() {
Set<String> keySet=students.keySet();
System.out.println("共有"+students.size()+"个学生");
//遍历keySet,取得每个key,再调用get取得对应的value
for(String stuID:keySet) {
Student st=students.get(stuID);
if(st!=null) {
System.out.println("学生"+st.name);
}
}
}
public static void main(String[] args) {
MapTest mp=new MapTest();
mp.testPut();
mp.testKeySet();
}
}
原先i++是写在if判断语句的末尾,只在成功添加后i+1,现在for循环条件在if(){}else{}两个条件任意之一执行完都会i+1.
可以把 i++单独拿出来放到 if 里边
int i=0;
for(;i<3;) {
System.out.println("请输入学生ID:");
String ID=console.next();
//判断该ID是否被占用
Student st=students.get(ID);
if(st==null) {
System.out.println("请输入学生姓名:");
String name=console.next();
//创建新的学生对象
Student newStudent=new Student(ID, name);
//通过调用student的put方法,添加ID-学生映射
students.put(ID, newStudent);
System.out.println("成功添加学生:"+students.get(ID).name);
i++;
}else {
System.out.println("该学生ID已被占用");
continue;
}
}
可以这样来