このプログラムは、すべてのチーム名の代わりに、唯一のルールブレーカーを印刷します

negar.n:

次のプログラムは、最初の2つの整数、法的なサッカー選手の数(n)とチームの数(m)をとります。次のn行では、すべてのそれらの値の文字列のゼロで、ハッシュマップのキーとして法的選手とプットそれらの名前を取ります。それはチームと、彼らが選択した選手の名前を取ります。チームは名前が法的な選手の中ではないのプレーヤーを選択した場合、チームは法律を破ったし、彼の名前は有罪として、またはチームはすでに別のチームによって取られるプレイヤーを選択した場合、両チーム名で印刷されます印刷されます。私は名前がアルファベット順に印刷したいTreeSetの原因で、その後に置きます。私はプログラムを実行すると、問題がどこにあるものの、すべてのチーム名が印刷されていますか?

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

            }
        }

これはサンプル入力であります:

    10 4
    dani carvajal
    eder militao
    sergio ramos
    raphael varane
    nacho
    eden hazard
    toni kroos
    martin odegaard
    karim benzema
    luka modric
    real madrid
    3
    martin odegaard
    karim benzema
    sergio ramos
    valencia
    2
    dani carvajal
    luka modric
    real sociedad
    2
    martin odegaard
    nacho
    atletico madrid
    3
    raphael varane
    eden hazard
    toni kroos

私の所望の出力は次のようになります。

    real madrid
    real sociedad

しかし、私が手出力は次のようになります。

    atletico madrid
    real madrid
    real sociedad
    valencia
アレックス:

実際に私は、これらのforループの条件を疑うでしょう。

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

そして

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

使用<代わりに<=私は必要とされるよりも、今あなたが各チームに1人のより多くの名前を読んでいると思われます。

あなたは整数値を読んだ後も、カーソルが次のscanner.nextLine()の呼び出しは、次の行の文字列を返さないように、単に「\ n」は目の前には、同じ行にはまだですが、空の文字列。そのため、あなたはまた、すべてのチームに入れてみました空の名前を持つ追加のプレーヤーを、得たので、すべてのチームが有罪としてマークされました。あなたはそれについての詳細を読むことができますここにすることができますこの問題を解決するには、たとえば、あなたが整数を読んでいると、次の文字列を読みたい後)(追加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);
  }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=28475&siteId=1