[英]How can two operations be in if-else if statement?
我正在尝试制作一个简单的足球模拟程序,但是在团队之间进行配对时遇到了问题。 如果找到一个条件,则if语句退出循环。 但是我想做两个条件和两个操作。 可能吗?
package soccer.simulator;
import java.util.Random;
/**
* @author Sertac
*/
public class SoccerSimulator {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int HomeTeamScore = 0;
int AwayTeamScore = 0;
Random randomGenerator = new Random();
String HomeTeam = new String();
String AwayTeam = new String();
int HomeTeamID = randomGenerator.nextInt(10);
int AwayTeamID = randomGenerator.nextInt(10);
if(HomeTeamID == AwayTeamID){
while (HomeTeamID != AwayTeamID){
AwayTeamID = randomGenerator.nextInt(10);
}
}
if(HomeTeamID == 0 || AwayTeamID == 0){
if(HomeTeamID == 0){
HomeTeam = "Arsenal";
}else{
AwayTeam = "Arsenal";
}
} else if(HomeTeamID == 1 || AwayTeamID == 1){
if(HomeTeamID == 1){
HomeTeam = "Barcelona";
}else{
AwayTeam = "Barcelona";
}
} else if(HomeTeamID == 2 || AwayTeamID == 2){
if(HomeTeamID == 2){
HomeTeam = "Bayern Munich";
}else{
AwayTeam = "Bayern Munich";
}
} else if(HomeTeamID == 3 || AwayTeamID == 3){
if(HomeTeamID == 3){
HomeTeam = "Chelsea";
}else{
AwayTeam = "Chelsea";
}
} else if(HomeTeamID == 4 || AwayTeamID == 4){
if(HomeTeamID == 4){
HomeTeam = "Borussia Dortmund";
}else{
AwayTeam = "Borussia Dortmund";
}
} else if(HomeTeamID == 5 || AwayTeamID == 5){
if(HomeTeamID == 5){
HomeTeam = "Galatasaray";
}else{
AwayTeam = "Galatasaray";
}
} else if(HomeTeamID == 6 || AwayTeamID == 6){
if(HomeTeamID == 6){
HomeTeam = "Juventus";
}else{
AwayTeam = "Juventus";
}
} else if(HomeTeamID == 7 || AwayTeamID == 7){
if(HomeTeamID == 7){
HomeTeam = "Manchester United";
}else{
AwayTeam = "Manchester United";
}
} else if(HomeTeamID == 8 || AwayTeamID == 8){
if(HomeTeamID == 8){
HomeTeam = "Milan";
}else{
AwayTeam = "Milan";
}
} else if(HomeTeamID == 9 || AwayTeamID == 9){
if(HomeTeamID == 9){
HomeTeam = "Real Madrid";
}else{
AwayTeam = "Real Madrid";
}
}
//Generating each random integers in range 0..99 for 90 minutes
for(int minutes = 0; minutes <= 90; minutes++){
int randomInt = randomGenerator.nextInt(100);
//if random int equals 0,1,2 home team scores
if(randomInt < 3){ HomeTeamScore = HomeTeamScore + 1; }
//if random int equals 98,99 away team scores
//home team has 1 more int because playing at home is better
if(randomInt > 97){ AwayTeamScore = AwayTeamScore + 1; }
}
System.out.println ("Simulation for match of the week:");
System.out.println (HomeTeam + " " + HomeTeamScore + " - " + AwayTeamScore + " " + AwayTeam);
}
}
输出为: 3 - 1 Arsenal
或: Arsenal 2 - 1
您只设置一个团队名称是因为根本没有循环,在您庞大的if-else
语句中只有一个最终条件是正确的。 一种更简单的方法(强烈建议使用此方法,以使在不久的将来会碰到您代码的其他人保持理智)将您的团队名称存储在一个数组中。
String[] teamNames = new String[] {"Arsenal", "Barcelona", "Bayern Munich", "Chelsea", "Borussia Dortmund", "Galatasaray", "Juventus", "Manchester United", "Milan", "Real Madrid"};
然后替换整个if-else
。
HomeTeam = teamNames[HomeTeamID];
AwayTeam = teamNames[AwayTeamID];
附带说明一下,您应遵循Java约定进行变量命名,并使用小写的camelCase( homeTeam
, awayTeam
, homeTeamID
, awayTeamId
)。
改变else if
if
尝试
import java.util.Random;
/**
* @author Sertac
*/
public class SoccerSimulator {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int HomeTeamScore = 0;
int AwayTeamScore = 0;
Random randomGenerator = new Random();
String HomeTeam = new String();
String AwayTeam = new String();
int HomeTeamID = randomGenerator.nextInt(10);
int AwayTeamID = randomGenerator.nextInt(10);
if(HomeTeamID == AwayTeamID){
while (HomeTeamID != AwayTeamID){
AwayTeamID = randomGenerator.nextInt(10);
}
}
if(HomeTeamID == 0 || AwayTeamID == 0){
if(HomeTeamID == 0){
HomeTeam = "Arsenal";
}else{
AwayTeam = "Arsenal";
}
} if(HomeTeamID == 1 || AwayTeamID == 1){
if(HomeTeamID == 1){
HomeTeam = "Barcelona";
}else{
AwayTeam = "Barcelona";
}
} if(HomeTeamID == 2 || AwayTeamID == 2){
if(HomeTeamID == 2){
HomeTeam = "Bayern Munich";
}else{
AwayTeam = "Bayern Munich";
}
} if(HomeTeamID == 3 || AwayTeamID == 3){
if(HomeTeamID == 3){
HomeTeam = "Chelsea";
}else{
AwayTeam = "Chelsea";
}
} if(HomeTeamID == 4 || AwayTeamID == 4){
if(HomeTeamID == 4){
HomeTeam = "Borussia Dortmund";
}else{
AwayTeam = "Borussia Dortmund";
}
} if(HomeTeamID == 5 || AwayTeamID == 5){
if(HomeTeamID == 5){
HomeTeam = "Galatasaray";
}else{
AwayTeam = "Galatasaray";
}
} if(HomeTeamID == 6 || AwayTeamID == 6){
if(HomeTeamID == 6){
HomeTeam = "Juventus";
}else{
AwayTeam = "Juventus";
}
} if(HomeTeamID == 7 || AwayTeamID == 7){
if(HomeTeamID == 7){
HomeTeam = "Manchester United";
}else{
AwayTeam = "Manchester United";
}
} if(HomeTeamID == 8 || AwayTeamID == 8){
if(HomeTeamID == 8){
HomeTeam = "Milan";
}else{
AwayTeam = "Milan";
}
} if(HomeTeamID == 9 || AwayTeamID == 9){
if(HomeTeamID == 9){
HomeTeam = "Real Madrid";
}else{
AwayTeam = "Real Madrid";
}
}
//Generating each random integers in range 0..99 for 90 minutes
for(int minutes = 0; minutes <= 90; minutes++){
int randomInt = randomGenerator.nextInt(100);
//if random int equals 0,1,2 home team scores
if(randomInt < 3){ HomeTeamScore = HomeTeamScore + 1; }
//if random int equals 98,99 away team scores
//home team has 1 more int because playing at home is better
if(randomInt > 97){ AwayTeamScore = AwayTeamScore + 1; }
}
System.out.println ("Simulation for match of the week:");
System.out.println (HomeTeam + " " + HomeTeamScore + " - " + AwayTeamScore + " " + AwayTeam);
}
}
问题出在这里:
if(HomeTeamID == 0 || AwayTeamID == 0){
if(HomeTeamID == 0){
HomeTeam = "Arsenal";
}else{
AwayTeam = "Arsenal";
}
} else if(HomeTeamID == 1 || AwayTeamID == 1){
if(HomeTeamID == 1){
HomeTeam = "Barcelona";
}else{
AwayTeam = "Barcelona";
}
} else if(HomeTeamID == 2 || AwayTeamID == 2){
if(HomeTeamID == 2){
HomeTeam = "Bayern Munich";
}else{
AwayTeam = "Bayern Munich";
}
} else if(HomeTeamID == 3 || AwayTeamID == 3){
if(HomeTeamID == 3){
HomeTeam = "Chelsea";
}else{
AwayTeam = "Chelsea";
}
} else if(HomeTeamID == 4 || AwayTeamID == 4){
if(HomeTeamID == 4){
HomeTeam = "Borussia Dortmund";
}else{
AwayTeam = "Borussia Dortmund";
}
} else if(HomeTeamID == 5 || AwayTeamID == 5){
if(HomeTeamID == 5){
HomeTeam = "Galatasaray";
}else{
AwayTeam = "Galatasaray";
}
} else if(HomeTeamID == 6 || AwayTeamID == 6){
if(HomeTeamID == 6){
HomeTeam = "Juventus";
}else{
AwayTeam = "Juventus";
}
} else if(HomeTeamID == 7 || AwayTeamID == 7){
if(HomeTeamID == 7){
HomeTeam = "Manchester United";
}else{
AwayTeam = "Manchester United";
}
} else if(HomeTeamID == 8 || AwayTeamID == 8){
if(HomeTeamID == 8){
HomeTeam = "Milan";
}else{
AwayTeam = "Milan";
}
} else if(HomeTeamID == 9 || AwayTeamID == 9){
if(HomeTeamID == 9){
HomeTeam = "Real Madrid";
}else{
AwayTeam = "Real Madrid";
}
}
U始终只分配一个队,无论是主队还是客队,因为您在这里使用的结构错误。 尝试类似的方法:
switch(HomeTeamID)
{
case 0: HomeTeam = "Arsenal";
break;
case 1: HomeTeam = "Barcelona";
...
break
}
与客队相同:
switch(HomeTeamID)
{
case 0: AwayTeam = "Arsenal";
break;
case 1: AwayTeam = "Barcelona";
...
break
}
并且您应该检查Java代码约定。.变量名应以小写字母开头。
如果用if替换else,则代码应该可以正常工作。
我将从一开始就开始。 您正在尝试做什么。
给定一些团队,您想选择两个随机的团队互相比赛,一个主场一个。
当前,您正在从“ Random
中选择两个随机int
id,并使用它们在隐含的团队数组中查找团队。
因此,首先使用@ssantos的建议-使数组明确,然后从那里简单地获取索引。
但是,我们有一个问题-团队无法发挥自己的作用。 因此,实际上我们需要一种略有不同的方法。 您需要做的是将所有团队组成的数组,将其洗牌,然后从数组中读取对。 实际上,这就是选择倾向于在锦标赛中起作用的方式。
这是我建议的代码:
private static final String[] TEAM_NAMES = new String[]{"Arsenal", "Barcelona", "Bayern Munich", "Chelsea", "Borussia Dortmund", "Galatasaray", "Juventus", "Manchester United", "Milan", "Real Madrid"};
private static final Random RANDOM = new Random();
public static void main(final String args[]) {
List<String> teams = new ArrayList<>(Arrays.asList(TEAM_NAMES));
while (teams.size() > 1) {
teams = playRound(teams);
}
System.out.println("The champion is " + teams);
}
public static List<String> playRound(final List<String> teams) {
Collections.shuffle(teams);
final Iterator<String> teamsIter = teams.iterator();
final List<String> winners = new ArrayList<>();
while (teamsIter.hasNext()) {
final String winner = play(teamsIter.next(), teamsIter.next());
winners.add(winner);
}
return winners;
}
public static String play(final String team1, final String team2) {
return RANDOM.nextBoolean() ? team1 : team2;
}
从顶部:
首先,我们声明常量-团队数组和Random
实例。 这些变量是static final
变量,因此在BLOCK_CAPITALS
中命名。
主要
接下来,我们得出main
方法。 此方法将团队带入List
。 我们需要复制团队,以免弄乱团队数组。 List
是一种更灵活的结构,您将在后面看到。 还要注意,您需要两支球队的力量-如果两队成对比赛,那么您需要在每一回合中将数字除以2。
该方法现在进入while
循环。 这种结构可以让每一轮的所有获胜球队互相对抗,直到获得最终冠军-锦标赛冠军。 它打印出冠军的名字。
playRound
这就是魔术发生的地方。
该方法首先对进入的团队进行shuffles
以便随机检索它们。 然后,它获取List
的Iterator
-这使您可以逐元素遍历List
元素。 如果没有偶数的团队,这也是引发错误的地方-第二个next()
将引发NoSuchElementException
。
然后,该方法进入另一个while
循环-而Iterator
不为空,它调用play
两支球队。 它将获胜团队放入winners
List
。 这是最后返回的List
。
List
不是具有add
方法,因此您可以动态填充它-这与具有固定大小的数组不同。
玩
这就是您实际的模拟的去向。 目前,它随机选择一个获胜者-您可以输入当前的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.