次のプログラムは、最初の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);
}
}