接口中放置的方法不能应用于给定类型;与哈希图

时间:2019-04-17 13:14:32

标签: java hashmap

我正在我的大学教科书中进行一些修订活动,并且一直陷在这个问题上。我们正在处理地图和列表,所要询问的问题需要我检查团队地图中是否已经存在该部门的列表,并具有ID,因此将新团队添加到已存在的部门中。

如果不这样做,则创建一个新的空列表并向其中添加新团队,将部门作为键,将新列表作为值。

重新阅读了几次材料,我开始理解我需要做的事情,但是当我进行编译时,它给了我一个方法放置interface.java.util.Map错误。

请提供解释说明

  

您在此处使用的运算符不能用于您所使用的值的类型。您在这里使用的是错误的,还是在使用错误的运算符。

我已经重新阅读了材料,进行了在线研究,甚至还购买了一门课程以了解地图及其运作方式。

看看过去的试卷对我有帮助,据我所知,问题出在第33行的.put操作上,但是我所读的一切都是在使用地图时,.put是如何向地图添加信息。 / p>

所以我不知道为什么会出现此错误。无奈之下,看了过去与我相同的考试答案,并测试了他们的代码,这些代码编译时没有错误。

我非常想了解原因,而不是查看材料的背面并只是查看答案,因为这是要进行修订的。

我们必须修改的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 个答案:

答案 0 :(得分:1)

你有

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>

答案 1 :(得分:1)

您的地图具有签名private SortedMap<String, Set<String>> teams;

您正在尝试插入一组Team对象。您需要将teams映射更改为Set<Team>