[每当我尝试运行时,我的错误就是这个“ hmap.put(id,b0);”我做得对吗?我试图做一个用户输入,并将其插入到哈希图中。它说:找不到适合put(Integer,Student)的方法方法Map.put(Integer,String)不适用(参数不匹配;学生无法转换为字符串)方法AbstractMap.put(Integer,String)不适用(参数不匹配;学生无法转换为字符串)方法HashMap.put(Integer,String)不适用
package javaapplication30;
import java.util.*;
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
class Student {
int id;
String sn, cor;
public Student(int id, String sn, String cor) {
this.id = id;
this.sn = sn;
this.cor = cor;
}
}
public class JavaApplication30 {
public static void main(String[] args) {
HashMap < Integer, String > hmap = new HashMap < Integer, String > ();
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 2; i++) {
System.out.print("id: ");
Integer id = sc.nextInt();
System.out.print("name: ");
String sn = sc.next();
System.out.print("course: ");
String cor = sc.next();
Student b0 = new Student(id, sn, cor);
hmap.put(id, b0);
}
for (Map.Entry m: hmap.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
}
您将Hasmap声明为:new HashMap < Integer, String > ();
然后您的HashMap期望将Integer作为键,将String作为值。您的对象b0不是字符串,而是一个Student对象。
然后您应该将HashMap更改为new HashMap < Integer, Student> ();
(或者您可以在b0上调用toString()函数,这取决于您想做什么)
您已声明地图为HashMap<Integer, String>
。换句话说,键类型是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
被声明为Integer
,b0
是Student
method Map.put(Integer,String) is not applicable
编译器已找到签名为put
的put(Integer,String)
方法>
(argument mismatch; Student cannot be converted to String)
编译器已尝试找到使用该
put
方法的合法方法。第一个参数是兼容的,但是没有转换会将Student
(这是参数)转换为String
(这是方法要求)。