Метод, вставленный в интерфейс, не может применяться к данным типамс hashmap - PullRequest
0 голосов
/ 17 апреля 2019

Я перебираю некоторые действия по пересмотру в моем учебнике для колледжа и застрял в этом вопросе.Мы работаем над картами и списками, поэтому задаваемый вопрос требует, чтобы я проверил, существует ли список для подразделения, уже существующего на карте команд, и идентификатор, поэтому добавьте новую команду в уже существующее подразделение.

Если этого не произойдет, то создайте новый пустой список и добавьте в него новую команду, назначив разделение в качестве ключа и новый список в качестве значения.

перечитавматериал несколько раз, я начал понимать, что мне нужно сделать, но когда я пришел к компиляции, он дает мне метод put interface.java.util.Map error.

Который по объяснению предлагает

Оператор, который вы здесь используете, не может использоваться для типа значения, для которого вы его используете.Вы здесь используете не тот или неправильный оператор.

Я перечитал материал, провел онлайн-исследование и даже купил курс udemy, чтобы понять карты и то, как они работают.

Просмотр предыдущего экзаменационного документа помог, и, насколько я понимаю, проблема заключается в действии .put в строке 33, но все, что я прочитал, - это при работе с картами .put - это способ добавления информации вкарта.

Так что я не знаю, почему я получаю эту ошибку.В отчаянии посмотрел на прошлый экзаменационный ответ, который совпадает с моим, и проверил их код, который был скомпилирован без ошибок.

Я отчаянно хочу понять, почему, а не смотрю в конец материала и простоглядя на ответ, так как он для ревизии.

Код класса LeagueAdmin (), который мы должны изменить, выглядит следующим образом:

import java.util.*;

public class LeagueAdmin
{
   private SortedMap<String, Set<String>> teams;
   /**
    * Constructor for objects of class LeagueAdmin
    */
   public LeagueAdmin()
   {
      // Create the HashMap
      //Map<String, Team> teams = new HashMap<>();
      super();
      this.teams = new TreeMap<>();

   }

   public void addTeam(String division, Team team)
   {
      boolean changed;

      if (!this.teams.containsKey(division)) // checks if the key division doesn't contain the value of divsioin  
      {
         HashSet<Team> teamSet = new HashSet<>(); // instantiates a list of objects called Team and assigns them to local variable teamSet
         teamSet.add(team); // adds a new team to the list

         this.teams.put(division, teamSet);
         changed = true;
      }
      else
      {
         Set<Team> teamSet = this.teams.get(division); // if list exists already adds new team to existing list
         changed = teamSet.add(team);
      }

   }     
}

нам также дали команды другого класса, которые у меня естьсм. ниже.


/**
 * class Team for TMA03Q2.
 * 
 * @author (M250 module team) 
 * @version (1.0)
 */
public class Team
{  
   private String name;
   private String division;
   private int won;
   private int drew;
   private int lost;
// no need to record points as = 3*won + drew   


   /**
    * Constructor for objects of class Team
    */
   public Team(String aName, String aDivision)
   {
      name = aName;
      division = aDivision;
      // no need to set won, drew and lost to 0
   }


   /**
    * getter for attribute points
    */
   public int getPoints()
   {
      return 3 * won + drew;
   }

   /**
    * getter for name
    */
   public String getName()
   {
      return name;
   }

   /**
    * getter for division
    */
   public String getDivision()
   {
      return division;
   }
   /**
    * getter for won
    */
   public int getWon()
   {
      return won;
   }   

   /**
    * getter for drew
    */
   public int getDrew()
   {
      return drew;
   }

   /**
    * getter for lost
    */
   public int getLost()
   {
      return lost;
   }   

   /**
    * increments the number of games won
    */   
   public void incWon()
   {
      won = won + 1;
   }

   /**
    * increments the number of games drawn
    */    
   public void incDrew()
   {
      drew = drew + 1;
   }

   /**
    * increments the number of games lost
    */    
   public void incLost()
   {
      lost = lost + 1;
   }

   /**
    * setter for division
    */
   public void setDivision(String aDivision)
   {
      division = aDivision;
   }

   public String toString()
   {
      return ("Team " + name + ", division: " + division + " stats: Won: " + won
       + ", drew: " + drew + ", lost: " + lost + ", points: " + getPoints());
   }

}

он должен принять новое подразделение и команду, проверить, если список уже существует и обновить соответствующим образом, но я не могу обойти эту ошибку.

Так что любая помощь будет очень полезна, когда я ошибся.Поскольку я хочу понять, как возникла проблема, а не просто посмотреть на ответ и не понять.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Ваша карта имеет подпись private SortedMap<String, Set<String>> teams;

Вы пытаетесь вставить набор Team объектов. Вам нужно изменить карту teams на Set<Team>.

1 голос
/ 17 апреля 2019

У вас есть

private SortedMap<String, Set<String>> teams;

, но затем попробуйте вставить в него Set<Team>

HashSet<Team> teamSet = new HashSet<>(); // instantiates a list of objects called Team and assigns them to local variable teamSet
...
this.teams.put(division, teamSet);

Либо обновите ваш teams, чтобы он стал Map<String, Set<Team>>, либо измените teamSet будет Set<String>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...