Java 该程序打印所有团队的名称,而不仅仅是违反规则的团队

Java 该程序打印所有团队的名称,而不仅仅是违反规则的团队,java,hashmap,treeset,Java,Hashmap,Treeset,下面的程序首先获取两个整数,即合法足球运动员的数量(n)和球队的数量(m)。在接下来的n行中,它接受合法玩家的名字,并将其作为hashmap的键,其所有值均为字符串零。然后是他们选择的球队和球员的名字。如果一个队选择的球员的名字不在合法球员之列,则该队违反了法律,其名字将被打印为有罪,或者如果一个队选择的球员已经被另一个队录取,则两个队的名字都将被打印。 我把它们放在树上,因为我想把名字按字母顺序打印出来。 但是当我运行程序时,所有的团队名称都会打印出来,问题出在哪里 import ja

下面的程序首先获取两个整数,即合法足球运动员的数量(n)和球队的数量(m)。在接下来的n行中,它接受合法玩家的名字,并将其作为hashmap的键,其所有值均为字符串零。然后是他们选择的球队和球员的名字。如果一个队选择的球员的名字不在合法球员之列,则该队违反了法律,其名字将被打印为有罪,或者如果一个队选择的球员已经被另一个队录取,则两个队的名字都将被打印。 我把它们放在树上,因为我想把名字按字母顺序打印出来。 但是当我运行程序时,所有的团队名称都会打印出来,问题出在哪里

    import java.util.HashMap;
    import java.util.Scanner;
    import java.util.TreeSet;

    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();
            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();
                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);

            }
        }
我期望的输出是:

    real madrid
    real sociedad
但我得到的结果是:

    atletico madrid
    real madrid
    real sociedad
    valencia

实际上,我会怀疑这些是循环条件:

for(int i=0;i<=numberOfPlayers;i++) {

用于(int i=0;我是否尝试过调试代码以找出哪里出了问题?此代码确实不可读。为什么不使用System.out来说明您输入的内容。还有一些注释会很好。我不明白为什么我在开始时输入玩家数量,并且再次为每个团队输入玩家数量。您的循环也为1这也是我感到困惑的地方。当我输入
时,你能为程序发布一个示例输入吗?请用解决方案更新。
for(int i=0;i<=numberOfPlayers;i++) {
for(int j=0;j<=numberOfPlayers;j++) {
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);
  }
}