На самом деле я бы заподозрил следующие условия: -1 oop:
for(int i=0;i<=numberOfPlayers;i++) {
и
for(int j=0;j<=numberOfPlayers;j++) {
Используйте <
вместо <=
. Я подозреваю, что теперь вы читаете еще одно имя в каждой команде, чем требуется.
Кроме того, после того, как вы прочитали целочисленное значение, курсор все еще находится на той же строке, прямо перед "\ n", поэтому следующий вызов scanner.nextLine () возвращает не строку следующей строки, а пустую строку. Из-за этого у вас появился дополнительный игрок с пустым именем, который вы также пытались ввести в каждую команду, поэтому каждая команда была отмечена как виновная. Вы можете прочитать больше об этом здесь . Чтобы решить эту проблему, вы можете, например, поместить дополнительный scanner.nextLine () после того, как вы прочитали целое число и хотите прочитать следующую строку:
public class Tamrin1_2_1 {
public static void main(String[] args) {
String player,team;
int numberOfTeams,numberOfPlayers;
Scanner scanner=new Scanner(System.in);
HashMap<String,String> teamsAndPlayers=new HashMap<String,String>();
TreeSet<String> guilty=new TreeSet<String>();
numberOfPlayers=scanner.nextInt();
numberOfTeams=scanner.nextInt();
scanner.nextLine();
for(int i=0;i<numberOfPlayers;i++) {
teamsAndPlayers.put(scanner.nextLine(), "0");
}
for(int i=0;i<numberOfTeams;i++) {
team=scanner.nextLine();
numberOfPlayers=scanner.nextInt();
scanner.nextLine();
for(int j=0;j<numberOfPlayers;j++) {
player=scanner.nextLine();
if(teamsAndPlayers.containsKey(player)) {
if(teamsAndPlayers.get(player).equals("0")) {
teamsAndPlayers.put(player, team);
}
else {
guilty.add(team);
guilty.add(teamsAndPlayers.get(player));
}
}
else {
guilty.add(team);
}
}
}
System.out.println(guilty);
}
}