(编辑代码)
我有一个问题,希望能有所帮助。这是我的条件:


您正在开发一个程序来跟踪球队在联盟中的排名。进行比赛时,获胜球队(得分较高的球队)将获得2分,而输球队伍将不会获得任何积分。如果平局,两队将获得1分。每当报告两队之间的比赛结果时,都必须调整积分榜的顺序。以下课程记录了一场比赛的结果。


public class GameResult
{
  public String homeTeam()   // name of home team
  { /* code not shown */ }

  public String awayTeam()   // name of away team
  { /* code not shown */ }

  public int homeScore()     // score for home team
  { /* code not shown */ }

  public int awayScore()     // score for away team
  { /* code not shown */ }

  // instance variables, constructors, and other methods not shown
}



每个团队的信息由TeamInfo类的实例存储,该实例的部分定义在下面。


public class TeamInfo
{
  public String teamName()
  { /* code not shown */ }

  public void increasePoints(int points)
  { /* code not shown */ }

  public int points()
  { /* code not shown */ }

  // instance variables, constructors, and other methods not shown
}



TeamStandings类存储有关团队排名的信息。部分声明如下所示。


public class TeamStandings
{
  TeamInfo[] standings; // maintained in decreasing order by points,
                        // teams with equal points can be in any order

  public void recordGameResult(GameResult result)
  { /* to be completed as part (c) */ }

  private int teamIndex(String name)
  { /* to be completed as part (a) */ }

  private void adjust(int index, int points)
  { /* to be completed as part (B)/> */ }

  // constructors and other methods not shown
}


这是实际的问题:


编写调整方法。方法调整应将在积分榜上在索引位置找到的球队的球队得分增加参数得分给出的数量。此外,应更改在积分榜上处于索引位置的团队的位置,以保持积分排名逐级递减;得分相等的球队可以以任何顺序出现。


这是我到目前为止所拥有的:

private void adjust(int index, int points)
{
int Score[] = new int[standings.length]
 for ( int i=0; i < standings.length; i++)
     {
         Score[i] = points;
         Arrays.sort(Score);
}
}


我意识到这是非常错误的,需要一些指导来解决。谢谢!

最佳答案

这样的事情应该起作用:

private void adjust(int index, int points) {
    // increase points of winning team
    TeamInfo curr = standings[index];
    curr.increasePoints(points);
    // get the new score of the winning team
    int points = curr.points();
    // perform an insertion sort on the modified portion
    int i = index;
    while (i > 0 && standings[i-1].points() < points) {
        // shift teams with lower scores rightwards
        standings[i] = standings[i-1];
        i--;
    }
    standings[i] = curr;
}


基本上,它只是使获胜团队(curr)使用指定的index参数并增加其分数。由于列表必须按团队分数降序排列,因此只需在调整分数后将团队插入正确的位置即可。

10-08 09:47