第84行代码为什么es.getValue()为什么调用不了name属性,代码见正文

来源:5-3 学生选课---删除 Map 中的学生

qq_析木_0

2017-02-17 10:44

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;
	/*
	 * 在构造器中初始化students属性
	 */
	public MapTest(){
		this.students=new HashMap();
	}
	/*
	 * 添加学生:
	 * 首先检查是否被占用,如果被占用,输出提示信息
	 * 如若没有,将该学生信息输入到学生的属性中,并打印出学生信息
	 */

	public void TestPut(){
		int i=0;
		while(i<3){//此处用while循环更加合适!!!
		System.out.println("请输入学号:");
		Scanner input=new Scanner(System.in);
		String id=input.next();
		Student newStudent=students.get(id);
		if(newStudent==null){
		System.out.println("请输入姓名:");
		
		String name=input.next();
		//创建学生对象
		Student a=new Student(id,name);
		students.put(id, a);
		System.out.println("成功添加学生"+students.get(id).name);
		i++;
		}else{
			System.out.println("您的id已被占用!");
			continue;
		}  		
		}	
	}
	public void testKeySet(){
		//通过keySet方法,返回Map中的所有"键"的Set集合
		Set<String> keySet=students.keySet();
		//遍历keySet,取得每个key值,再调用get方法取得每个键对应的value
		for(String stuID:keySet){
			Student st=students.get(stuID);
			System.out.println(st.name);			
		}		
	}
	
	/*
	 * 删除Map中的映射
	 */
	public void testRemove(){
		System.out.println("请输入要删除的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不存在,请重新输入:");
			continue;
		}
		students.remove(id);
		System.out.println("已经成功删除"+st.name);
		break;
		}
	}
	/*
	 * 通过entrySet方法遍历Map
	 */
	public void testEntrySet(){
		//通过entrySet方法返回所有的键值对
		Set<Entry<String, Student>> entrySet=students.entrySet();
		for(Entry es:entrySet){
			System.out.println("key值:"+es.getKey());
			System.out.println("Value值:"+es.getValue());	
		}
		
	}
	
	

	
	public static void main(String[] args){
         MapTest mt=new MapTest();
         mt.TestPut();
         mt.testKeySet();	
         mt.testRemove();
         mt.testEntrySet();
	}
}

Student代码:

package com.imooc.collection;

import java.util.HashSet;
import java.util.Set;

public class Student {
	 public String id;
	 public String name; 
	 public Set<Course> courses;
	 
	 public Student(String id,String name){
		 this.id=id;
		 this.name=name;
		 this.courses=new HashSet<Course>();
		 
	 }
	

}


写回答 关注

2回答

  • ziom
    2017-02-17 11:47:18
    已采纳

    给Entry指定一下泛型

    for(Entry<String, Student> es:entrySet){
        System.out.println("key值:"+es.getKey());
        System.out.println("Value值:"+es.getValue().name);   
    }


    qq_析木_...

    非常感谢!

    2017-02-18 19:02:32

    共 4 条回复 >

  • sunzer
    2017-02-17 11:26:51

    es.getValue() 得到的是Student对象,用es.getValue().name获得Student的name属性。

Java入门第三季

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

409792 学习 · 4340 问题

查看课程

相似问题