public void RemoveTest() {
Scanner input = new Scanner(System.in);
System.out.println("Please input Id wanted to delete:");
String idString=null;
while (true) {
idString = input.next();
Student student = map.get(idString);
if (student == null) {
System.out.print("Not exists this student,Please input again:");
continue;
} else {
map.remove(idString);
break;
}
}
input.close();
}
这个方法里面 idString = input.next();一直出现上述错误,Student是我写的一个类,没问题
你在控制台输入id了吗?我测试了一下
String idString=null;
idString = input.next();
System.out.println(idString);
是没问题的,要不就是Scaner引入的包不是java.util.Scanner
idString = input.nextLine();
while (true)
->
while (input.hasNext())
改了nexLine()还是会出现Exception in thread "main" java.util.NoSuchElementException: No line found ,感觉就是没接收到字符串啊
map.remove(idString);
你的map里有idString么
运行了你的代码,没有报错,正常运行的
我百度了一下,感觉我这句代码确实没问题,是不是我上面的方法里面也有nexLine 这样的方法 ,影响下面的输入,我还是把代码都贴出来吧:
package com.jay.List_test;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class Map_test {
private Map<String, Student> map;
public Map_test() {
this.map = new HashMap<String, Student>();
}
public void Puttest() {
Scanner input = new Scanner(System.in);
String studentId;
int i = 0;
while (i < 3) {
System.out.print("Please input Student'Id:");
studentId = input.next();
// Student student = map.get(studentId);
if (map.get(studentId) == null) {
System.out.print("Please input student's name:");
String name = input.next();
Student teStudent = new Student(studentId, name);
map.put(studentId, teStudent);
System.out.println("Successful!");
// input.nextLine();
} else {
System.out.println("The StudentId is exists!");
continue;
}
i++;
}
input.close();
}
public void KeySettest() {
Set<String> set = new HashSet<>();
set = map.keySet(); // keyset方法返回一个关键字key的集合; 而entryset返回的是一个键值对的集合;
System.out.println("The total student numbers is:" + set.size());
for (String string : set) {
Student student = map.get(string);
if (student != null) {
System.out.println("The Student is:" + student.getId() + " " + student.getName());
}
}
}
// 删除map中的元素,测试remove
public void RemoveTest() {
Scanner input = new Scanner(System.in);
System.out.println("Please input Id wanted to delete:");
String idString=null;
while (true) {
idString = input.nextLine();
Student student = map.get(idString);
if (student == null) {
System.out.print("Not exists this student,Please input again:");
continue;
} else {
map.remove(idString);
break;
}
}
input.close();
}
// 通过entryset方式遍历map
public void EntrySettest() {
Set<Entry<String, Student>> entries = map.entrySet();
for (Entry<String, Student> entry : entries) {
System.out.println("The student id:" + entry.getKey());
System.out.println("The student name:" + entry.getValue().getName());
}
}
public static void main(String[] args) {
Map_test mTest = new Map_test();
mTest.Puttest();
mTest.KeySettest();
mTest.RemoveTest();
mTest.EntrySettest();
}
}
Student类如下: package com.jay.List_test;
import java.util.HashSet;
import java.util.Set;
public class Student {
private String name;
private String id;
private Set<Course> set;
public Student(String id,String name) {
this.name=name;
this.id=id;
set=new HashSet<>();
}
public String getName() {
return name;
}
public String getId() {
return id;
}
public Set<Course> getSet() {
return set;
}
public void TestForeach(){
for (Course course : set) {
System.out.println("Course:"+course.getId()+" "+course.getName());
}
}
}
异常: Please input Student'Id:1
Please input student's name:jay
Successful!
Please input Student'Id:2
Please input student's name:tom
Successful!
Please input Student'Id:3
Please input student's name:jack
Successful!
The total student numbers is:3
The Student is:1 jay
The Student is:2 tom
The Student is:3 jack
Please input Id wanted to delete:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at com.jay.List_test.Map_test.RemoveTest(Map_test.java:63)
at com.jay.List_test.Map_test.main(Map_test.java:89)
IO流关闭的位置不对,你把所有的input.close()去掉然后执行就不会报错,然后在去考虑在哪里关闭IO流合适
Scanner input = new Scanner(System.in) 中Scanner打开的是标准流, 一旦执行关闭在下次循环中将无法打开,建议使用全局配置,最后在main方法中一次性关闭