为什么我的打印成功添加学生为null,没有报错

来源:5-2 学生选课---使用 Map 添加学生

DCFY

2020-08-16 13:23

package com.imooc.collection;import java.util.HashMap;import java.util.Map;import java.util.Scanner;import java.util.Set;public class TestMap {/* * 用来承装学生类型对象 */	public Map<String,student> students;/* * 在构造器初始化student属性	 */	public TestMap(){		this.students=new HashMap<String,student>();	}/* * 测试添加:输入学生ID判断是否被占用 * 若未被占用,则输入姓名,创建学生对象,并且添加到student中	 */	public void testPut() {		//创建Scanner对象,用来获取输入的学生信息		Scanner inpu=new Scanner(System.in);		int i=0;		while(i<3) {			System.out.println("请输入学生ID:");			String ID=inpu.next();			//判断ID是否被占用			student st=students.get(ID);			if(st==null) {				//提示输入学生姓名				System.out.println("请输入学生姓名:");				String name=inpu.next();				//创建新的学生对象				student newStudent=new student(ID,name);				//通过调用students的put方法,添加ID-学生映射				students.put(ID, newStudent);				System.out.println("成功添加学生:"+students.get(ID).name);				i++;			}			else {				System.out.println("该学生ID已被占用!");				continue;			}		}	}	/*	* 测试Map的KeySet方法	*/	public void testKeySet() {		//通过KeySet方法,返回Map中的所有“键”的Set集合		Set<String> keySet=students.keySet();		//取得学生的数量		System.out.println("共有:"+students.size()+"个学生");		//遍历keySet,取得每一个键,在调用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) {		// TODO 自动生成的方法存根		TestMap tm=new TestMap();		tm.testPut();		tm.testKeySet();	}}

http://img3.mukewang.com/5f38c2b10001e6d619201075.jpg

写回答 关注

2回答

  • 慕斯卡8332134
    2020-09-16 10:50:35

    我和你一样 也是没有报错 但输出的姓名是null  你现在解决了嘛

  • DCFY
    2020-08-16 13:30:15
    package com.imooc.collection;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    import java.util.Set;
    public class TestMap {
    /* 
    * 用来承装学生类型对象
     */	
     public Map<String,student> students;
     /* 
     * 在构造器初始化student属性	
      */
      	public TestMap(){	
      		this.students=new HashMap<String,student>();	
      		}
      		/*
      		 * 测试添加:输入学生ID判断是否被占用 * 若未被占用,则输入姓名,创建学生对象,并且添加到student中
      		 */	
      		 public void testPut() 
      		 {
      		//创建Scanner对象,用来获取输入的学生信息
      	Scanner inpu=new Scanner(System.in);	
      	int i=0;
      while(i<3) {	
      System.out.println("请输入学生ID:");	
     String ID=inpu.next();	
     //判断ID是否被占用	
     student st=students.get(ID);
     if(st==null) {	
     //提示输入学生姓名		
    System.out.println("请输入学生姓名:");	
    String name=inpu.next();		
    //创建新的学生对象		
    student newStudent=new student(ID,name);				
    //通过调用students的put方法,添加ID-学生映射				
    students.put(ID, newStudent);				
    System.out.println("成功添加学生:"+students.get(ID).name);				
    i++;		
    	}			
    	else {				
    	System.out.println("该学生ID已被占用!");				
    	continue;			
    	}		
    	}	
    	}	
    	/*	
    	* 测试Map的KeySet方法	
    	*/	
    	public void testKeySet() 
    	{		
    	//通过KeySet方法,返回Map中的所有“键”的Set集合		
    	Set<String> keySet=students.keySet();		
    	//取得学生的数量		
    	System.out.println("共有:"+students.size()+"个学生");		
    	//遍历keySet,取得每一个键,在调用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) {		
    	// TODO 自动生成的方法存根		
    	TestMap tm=new TestMap();		
    	tm.testPut();		
    	tm.testKeySet();	
    	}
    	}

    没有报错!知怎么回事!


    weixin...

    String name=inpu.next(); 把这个name换个其他就行了 System.out.println("成功添加学生:"+students.get(ID).name); 你get的是上面的name的常量但是他的类型是student所以为空

    2022-01-11 15:34:55

    共 1 条回复 >

Java入门第三季

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

409792 学习 · 4340 问题

查看课程

相似问题