为什么我不能做hashmap.put()

问题描述 投票:-1回答:2

[每当我尝试运行时,我的错误就是这个“ 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());
    }
  }
}
java hash hashmap
2个回答
0
投票

您将Hasmap声明为:new HashMap < Integer, String > ();

然后您的HashMap期望将Integer作为键,将String作为值。您的对象b0不是字符串,而是一个Student对象。

然后您应该将HashMap更改为new HashMap < Integer, Student> ();(或者您可以在b0上调用toString()函数,这取决于您想做什么)


0
投票

您已声明地图为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被声明为Integerb0Student

method Map.put(Integer,String) is not applicable 

编译器已找到签名为putput(Integer,String)方法>

(argument mismatch; Student cannot be converted to String)

编译器已尝试找到使用该put方法的合法方法。第一个参数是兼容的,但是没有转换会将Student(这是参数)转换为String(这是方法要求)。

© www.soinside.com 2019 - 2024. All rights reserved.