почему я не могу сделать hashmap.put () - PullRequest
0 голосов
/ 22 апреля 2020

Всякий раз, когда я пытаюсь запустить мою ошибку, это "hmap.put (id, b0);" я делаю это правильно? Я пытаюсь сделать пользовательский ввод и вставить его в hashmap. в нем говорится: не найдено подходящего метода для метода put (Integer, Student). Map.put (Integer, String) неприменим (несоответствие аргументов; ученик не может быть преобразован в 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());
    }
  }
}

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Вы объявили карту 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 в интерфейсе Map, подпись которого put(Integer,String). У него правильное имя и правильное число параметров. Но ...

(argument mismatch; Student cannot be converted to String)

Компилятор попытался найти законный способ использования этого метода put. Первый аргумент совместим, но не существует преобразования, которое преобразует Student (что и является аргументом) в String (что и требуется для метода).

Решение состоит в том, чтобы изменить объявление hmap:

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

(<> указывает компилятору выводить (то есть обрабатывать) параметры типа generi c из контекста.)

0 голосов
/ 22 апреля 2020

Вы объявили свой Hasmap как: new HashMap<Integer, String>();

Тогда ваш HashMap ожидает Integer в качестве ключа и String в качестве значения. Ваш объект b0 не является String, это объект Student.

Затем вы должны изменить HashMap на new HashMap<Integer, Student>(); (или вы можете вызвать функцию toString () для b0, это зависит от того, что вы хотите сделать) )

...