为了账号安全,请及时绑定邮箱和手机立即绑定

NoSuchElementException

package com.imooc.collection;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class MapTest {
	/*
	 * 承装学生类型对象
	 */
	public Map<String, Student> students;
	
	/*
	 * 在构造方法中初始化students属性
	 */
	public MapTest() {
		this.students = new HashMap<>();
	}
	
	/*
	 * 测试添加方法
	 */
	public void testPut() {
		Scanner in = new Scanner(System.in);
		for(int i = 0; i < 3; ) {
			System.out.println("请输入学生id");
			String id = in.next();
			//判断是否被占用
			Student stu = this.students.get(id);
			if(stu == null) {
				System.out.println("请输入学生姓名:");
				String name = in.next();
				Student stuNew = new Student(id, name);
				this.students.put(id, stuNew);
				System.out.println("成功添加学生:" + this.students.get(id).name);
				++i;
			} else {
				System.out.println("该学生id已被占用");
//				continue;
			}
		}
		//为什么这边关闭Scanner会出现异常?
//		in.close();
	}
	
	/*
	 * 测试key set 方法
	 */
	public void testKeySet() {
		Set<String> keySet = this.students.keySet(); 
		System.out.println("总共有:" + this.students.size() + "个学生。");
		for (String string : keySet) {
			Student stu = this.students.get(string);
			if(stu != null) {
				System.out.println("学生:" + stu.name);
			}
		}
	}
	
	/*
	 * 测试删除map中的映射
	 */
	public void testRemove() {
		
		Scanner in = new Scanner(System.in);
		while(true) {
			System.out.println("请输入要删除的学生id");
			//取消45行的注释,为什么这边会出现异常?NoSuchElementException
			String id = in.next();
			//判断该id是否有对象的学生对象
			Student stu = this.students.get(id);
			if(id == null) {
				System.out.println("该id不存在");
				continue;
			}
			this.students.remove(id);
			System.out.println("成功删除学生:" + stu.name);
			break;
		}
		in.close();
	}
	
	/*
	 * 通过entry set遍历
	 */
	public void testEntrySet() {
		Set<Entry<String, Student>> entrySet = this.students.entrySet();
		for (Entry<String, Student> entry : entrySet) {
			System.out.println("取得键:" + entry.getKey());
			System.out.println("对应的值为:" + entry.getValue().name);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MapTest mt =new MapTest();
		mt.testPut();
		mt.testKeySet();
		mt.testRemove();
		mt.testEntrySet();
	}

}


正在回答

2 回答

当一个类中存在两个及两个以上的Scanner实例时,其中一个Scanner的实例执行close()方法时,会关闭其他潜在的InputStream流,导致其他Scanner的扫描器无法读取输入流。

2 回复 有任何疑惑可以回复我~

为什么在45行添加一个关闭Scanner的语句,会导致在70行报一个NoSuchElementException的错误?

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

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409790    人
  • 解答问题       4340    个

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

进入课程

NoSuchElementException

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信