2013-11-03 97 views
1

我正在尝试做一个简单的足球模拟程序,但是我有一个关于将球队彼此匹配的问题。如果语句在找到一个条件后退出循环。但我想做两个条件和两个操作。可能吗?两个操作如何在if-else 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

+2

请详细说明这一点。 –

+0

问题是我看不到输出上的两个团队。输出中只有一个团队出现,我需要两个团队进行单个匹配。 –

+0

请坚持使用Java命名约定,变量位于lowerCamelCase中。 UpperCamelCase被保留给类。这段代码基本上是无法理解的。 –

回答

5

只设置了一个队名,因为没有循环可言,只有最后一个条件将在您巨大的if-else是真实的声明。一个更简单的方法(和为了保持对任何人将触动您的代码,在不久的将来,理智强烈推荐),将存储您的球队的名字在array.-

String[] teamNames = new String[] {"Arsenal", "Barcelona", "Bayern Munich", "Chelsea", "Borussia Dortmund", "Galatasaray", "Juventus", "Manchester United", "Milan", "Real Madrid"}; 

然后更换整个if-else for.-

HomeTeam = teamNames[HomeTeamID]; 
AwayTeam = teamNames[AwayTeamID]; 

作为一个侧面说明,你应该坚持Java约定的变量命名,并使用小写驼峰(homeTeamawayTeamhomeTeamIDawayTeamId)。

+0

它适用于我。谢谢!! –

+0

很高兴帮助:) – ssantos

0

的问题就在这里:

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"; 
      } 
     } 

,因为你在这里使用了错误的建设ü总是分配只有一支球队,无论是主场还是客场球队。尝试是这样的:

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代码conventions..The变量名应该以小写开头。

2

改变else ifif

尝试

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

     } 
    } 
0

更换否则,如果有如果,和代码应工作正常。

0

我会从一开始就开始。你试图去做什么?

鉴于一些球队,你想选择两个随机队彼此玩,一个家和一个客场。

目前您从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。我们需要制作一个小组的副本,以便我们不会混淆球队阵列。 A List是一个更灵活的结构,稍后您会看到。另外请注意,你需要两支球队的力量 - 如果球队成对出场,那么你需要在每个回合中可以被两个整除的数字。

该方法现在进入while循环。这种结构不断打出每轮比赛中的所有胜利队伍,直到达到最终胜利者 - 比赛冠军。它打印出冠军的名字。

playRound

这就是奇迹发生。

该方法首先shuffles传入队伍,以便他们随机检索。然后它得到IteratorList - 这允许您逐步沿着List元素。如果没有偶数的球队,这也是错误将被抛出的地方 - 第二个next()将抛出一个NoSuchElementException

该方法然后进入另一个while循环 - 而Iterator不是空的它调用play与两个团队。它将获胜的队伍放入winnersList。这是最后返回的List

不是一个List有一个add方法,以便您可以动态填充它 - 这是不同于具有固定大小的数组。

发挥

这是你的实际模拟会去。目前它随机选择一个赢家 - 你可以把你当前的方法。