写一段java模拟世界杯的小程序 (翻译:晓艺) 项目描述 首先会有四个队伍,在初赛阶段会互相比赛,赢得3分,平的1分,输的0分。每个队伍都会和另外三支队伍进行比赛。 初赛结束以后,选取分数最高的两个球队进行决赛(如果分数一样,就比较进球数,如果进球数也一样,则随机选取,考虑使用TreeSet)。
时间: 2023-11-18 07:05:18 浏览: 160
峦大杉研究进展
以下是用Java模拟世界杯的小程序代码:
```java
import java.util.*;
public class WorldCupSimulation {
public static void main(String[] args) {
String[] teams = {"Brazil", "Germany", "Argentina", "Spain"};
Map<String, Integer> score = new HashMap<>();
Map<String, Integer> goals = new HashMap<>();
// 初赛阶段,每个队伍都会和另外三支队伍进行比赛
for (int i = 0; i < teams.length; i++) {
for (int j = i + 1; j < teams.length; j++) {
int result = simulateMatch();
if (result == 1) {
addScore(score, teams[i], 3);
} else if (result == 2) {
addScore(score, teams[j], 3);
} else {
addScore(score, teams[i], 1);
addScore(score, teams[j], 1);
}
int goalDiff = simulateGoals();
addGoals(goals, teams[i], goalDiff);
addGoals(goals, teams[j], -goalDiff);
}
}
// 选取分数最高的两个球队进行决赛
TreeSet<String> sortedTeams = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String a, String b) {
int scoreDiff = score.get(b) - score.get(a);
if (scoreDiff != 0) {
return scoreDiff;
}
int goalDiff = goals.get(b) - goals.get(a);
if (goalDiff != 0) {
return goalDiff;
}
return new Random().nextInt(2) == 0 ? -1 : 1;
}
});
sortedTeams.addAll(Arrays.asList(teams));
String[] finalists = sortedTeams.stream().limit(2).toArray(String[]::new);
System.out.println("Finalists: " + Arrays.toString(finalists));
System.out.println("Scores: " + score);
System.out.println("Goals: " + goals);
}
// 模拟比赛结果,返回值为1代表第一个队伍胜利,2代表第二个队伍胜利,0代表平局
private static int simulateMatch() {
double p = Math.random();
if (p < 0.4) {
return 1;
} else if (p < 0.8) {
return 2;
} else {
return 0;
}
}
// 模拟进球数
private static int simulateGoals() {
double p = Math.random();
if (p < 0.2) {
return 3;
} else if (p < 0.6) {
return 2;
} else if (p < 0.9) {
return 1;
} else {
return 0;
}
}
// 增加队伍的得分
private static void addScore(Map<String, Integer> score, String team, int points) {
score.put(team, score.getOrDefault(team, 0) + points);
}
// 增加队伍的进球数
private static void addGoals(Map<String, Integer> goals, String team, int goalsScored) {
goals.put(team, goals.getOrDefault(team, 0) + goalsScored);
}
}
```
在这个程序中,我们用两个`Map`分别记录每个队伍的得分和进球数。在初赛阶段,我们模拟每两支队伍之间的比赛,并根据比赛结果更新每个队伍的得分和进球数。最后,我们使用`TreeSet`对得分进行排序,如果得分相同,则比较进球数,如果进球数也相同,则随机选择一个队伍。最终,我们选择得分最高的两个队伍进行决赛,并输出各个队伍的得分和进球数。
阅读全文