我正在我的大学教科书中进行一些修订活动,并且一直陷在这个问题上。我们正在处理地图和列表,所要询问的问题需要我检查团队地图中是否已经存在该部门的列表,并具有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());
}
}
它应该接受新的部门和团队,检查是否已经有一个列表并进行相应的更新,但我无法克服此错误。
因此,如果我做错了什么,将得到极大的帮助。我想了解问题是如何发生的,而不仅仅是看一个答案就不了解。
答案 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>
。