Java 为什么可以';我不能做hashmap.put()

Java 为什么可以';我不能做hashmap.put(),java,hash,hashmap,Java,Hash,Hashmap,每当我试图运行我的错误是“hmap.put(id,b0);”我做得对吗?我正在尝试做一个用户输入并将其插入hashmap。 它说: 找不到适合put的方法(整数,学生) 方法Map.put(整数,字符串)不适用 (参数不匹配;学生不能转换为字符串) 方法AbstractMap.put(整数,字符串)不适用 (参数不匹配;学生不能转换为字符串) 方法HashMap.put(整数,字符串)不适用 (参数不匹配;学生不能转换为字符串) PackageJavaApplication30; 导入java.

每当我试图运行我的错误是“hmap.put(id,b0);”我做得对吗?我正在尝试做一个用户输入并将其插入hashmap。 它说: 找不到适合put的方法(整数,学生) 方法Map.put(整数,字符串)不适用 (参数不匹配;学生不能转换为字符串) 方法AbstractMap.put(整数,字符串)不适用 (参数不匹配;学生不能转换为字符串) 方法HashMap.put(整数,字符串)不适用

(参数不匹配;学生不能转换为字符串)
PackageJavaApplication30;
导入java.util.*;
导入java.util.Scanner;
导入java.util.Map;
导入java.util.HashMap;
班级学生{
int-id;
串sn,cor;
公立学生(整数id、字符串序号、字符串cor){
this.id=id;
这个.sn=sn;
this.cor=cor;
}
}
公共类JavaApplication30{
公共静态void main(字符串[]args){
HashMaphmap=newhashmap();
扫描仪sc=新的扫描仪(System.in);
对于(int i=0;i<2;i++){
系统输出打印(“id:”);
整数id=sc.nextInt();
系统输出打印(“名称:”);
字符串sn=sc.next();
系统输出打印(“课程:”);
字符串cor=sc.next();
学生b0=新学生(id、sn、cor);
hmap.put(id,b0);
}
对于(Map.Entry m:hmap.entrySet()){
System.out.println(m.getKey()+“”+m.getValue());
}
}
}

您将Hasmap声明为:
newhashmap()

然后,HashMap期望整数作为键,字符串作为值。 对象b0不是字符串,而是学生对象


然后您应该将HashMap更改为
newhashmap()
(或者您可以在b0上调用toString()函数,这取决于您要执行的操作)

您已将映射声明为
HashMap
。换句话说,键类型是
Integer
,值类型是
String

但你要这样做:

  Student b0 = new Student(id, sn, cor);
  hmap.put(id, b0);
正在尝试添加一个地图条目,其中值为
Student

Student
不是
String
的子类,因此这是不合法的


下面是错误消息的内容,以及如何解释它:

no suitable method found for put(Integer,Student) 
与此调用相对应的
put(id,b0)
。注意
id
被声明为
整数
b0
学生

method Map.put(Integer,String) is not applicable 
编译器在
Map
接口中找到了一个
put
方法,其签名为
put(整数,字符串)
。它具有正确的名称和正确的参数数。但是

(argument mismatch; Student cannot be converted to String)
编译器试图找到一种合法的方法来使用
put
方法。第一个参数是兼容的,但是没有将
学生
(这是参数)转换为
字符串
(这是方法所需要的)的转换

解决方案是更改
hmap
的声明:

HashMap<Integer, Student> hmap = new HashMap<>();
HashMap hmap=newhashmap();

告诉编译器从上下文推断(即计算)泛型类型参数。)

b0
的类型是
Student
,但应该是
String
或使用
HashMap
@Pavneet\u Singh非常感谢!我忘了那一部分,现在我可以修好了!非常感谢你!