猿问

什么情况下编译器会提示” java.util.NoSuchElementException“

package course;

import java.io.*;

import java.util.*;

import java.util.Map.Entry;

public class CreateStudent {

private static int num;

public Map<String,student> stud; 

//Map<键,值>[这里的泛型建立了键和值的映射关系] a=new HashMap<键,值>();

public CreateStudent(int i){

this.stud=new HashMap<String,student>();

//建立hash表

if(confirm(i)){  

num=i;

create(); 

//如果通过验证程序则执行创建学生程序

}

}

private Boolean confirm(int u){ 

//验证程序,如果通过返回true,否则返回false

try{

if(u<=0||u>=20)

throw new IOException();

else 

return true;

}catch(IOException e){

System.out.println("输入的数据有误!");

e.printStackTrace();

return false;

}

}

private void create(){

int i=0;

while(i<num){

System.out.println("请输入学生id");

Scanner scan1=new Scanner(System.in);

String str1=scan1.next();

if(stud.get(str1)==null){ 

//如果此学生id没有对应的学生对象则继续下面的步骤

System.out.println("请输入id="+str1+"的学生姓名");

String nam=scan1.next();

student stu=new student(nam,str1);

stud.put(str1, stu);

System.out.println("成功添加"+stu.id+stu.name);

i++;

}

else{

System.out.println("该学生id已被占用");

continue;

}

if(i==num)

scan1.close();

}

}

public void remove(){ 

Scanner scan2=new Scanner(System.in);

while(true){

System.out.println("请输入要删除的学生的id");

String str3=scan2.next();//编译器提示此处有问题

if(stud.get(str3)==null){

System.out.println("此id尚未注册");

continue;

}

stud.remove(str3);

scan2.close();

break;

}

}

 

private void EntrySet(){

//通过entrySet返回Map中所有键值对。

Set<Entry<String,student>> Entryset=stud.entrySet();//Entry 为Map的一个内部类

for(Entry<String,student> a:Entryset){

System.out.println("取得键"+a.getKey());

System.out.println("值为"+a.getValue().name);

}

}

public static void main(String[] args){

System.out.println("请输入想要创建的学生个数");

Scanner scan0=new Scanner(System.in);

int h=scan0.nextInt();

CreateStudent stu0=new CreateStudent(h);

scan0.close();

stu0.output();

stu0.remove();

stu0.EntrySet();

}

如题,为什么系统会出现这种提示,这代码应该如何改进?求大神指教

未来开拓者
浏览 1953回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答