下面的程序首先取两个整数,合法足球运动员的数量(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);
}
}
这是一个示例输入:
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++) {
使用<
而不是<=
。我怀疑现在您在每个团队中读入的名字比所需的多了一个。
此外,在读取整数值后,光标仍然在同一行,就在“\n”前面,因此下一次 Scanner.nextLine() 调用不会返回下一行的字符串,而是返回一个空字符串。因此,你有一个额外的空名球员,你也试图将其放入每个团队中,因此每个团队都被标记为有罪。您可以阅读更多相关信息here 。为了解决这个问题,您可以在读取一个整数并接下来想要读取一个字符串后放置一个额外的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);
}
}
关于java - 该程序打印所有团队的名称,而不仅仅是破坏规则的人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60560783/