2

当我编译此代码时,我得到的唯一错误是“无法将获胜者解析为变量”或“令牌“获胜者”的语法错误,删除此令牌”我知道错误与我的 if-else 语句有关,但我不知道我做错了什么,或者我只是做错了。有没有更好的方法可以在随机统计的两支球队之间取得胜利?

public class Team {

    /**
     * The name of the team.
     */
    public String name;

    /**
     * The location of the team.
     */
    public String location;

    /**
     * The offensive strength of the team.
     */
    public double offense;

    /**
     * The defensive strength of the team.
     */
    public double defense;

    /**
     * Create a team with specified name and location, and with offense and defense capabilities
     * randomly initialized using the luck() method.
     *
     * @param name
     * @param location
     */
    public Team(String name, String location, double offense, double defense) {
      this.name = name;
      this.location = location;
      this.offense = luck();
      this.defense = luck();
    }     

    /**
     * The luck() method returns a random value between 0 and 1, using Math.random().
     * 
     * @returns a real value in range [0,1]
     */
    public double luck() {
        return Math.random();
    }

    /**
     * Run a competition against the specified visiting team
     * 
     * @param other the team to play against
     * @returns the winner team
     */
    Team play(Team visitor) {
        double home = (this.offense + this.defense + 0.2) * this.luck();
        double away = (visitor.offense + visitor.defense) * visitor.luck();
        if (home > away) {

        }
        else {
          away = winner;
        }
        return winner;  
    }

    /**
     * Run a competition between two teams specified on standard input.
     * Print statistics of the winner.
     * <p>
     * Each team is read in the following format :
     * <pre>
     * &lt;name&gt; 
     * &lt;location&gt;
     * </pre>
     * (Note that name and location should be separate lines for each team)
     * 
     * @param args can be ignored.
     */
    public static void main(String[] args) {
        // Be sure to follow the same printing command to ask user
        // for name and location of two teams (e.g, home and away)
        System.out.println("Enter name and location for home team (on separate lines)");
        // Get input from user for home team.
        // Create a home team object with the given data.
        Scanner in = new Scanner(System.in);
        team = in.nextLine();
        location = in.nextLine();
        Team home = new Team(name, location, offense, defense);
        System.out.println("Enter name and location for away team (on separate lines)");
        // Get input from user for away team.
        // Create an away team object with the given data.
        team = in.nextLine();
        location = in.nextLine();
        Team away = new Team(name, location, offense, defense);
        // Print out home team information.
        System.out.println("Home team is: " + home.name + " from " + home.location + " rated <home_team_offense> (offense) + <home_team_defense> (defense)");
        // Print out away team information.

        System.out.println("Away team is: " + away.name + " from " + away.location + " rated <away_team_offense> (offense) + <away_team_defense> (defense)");

        // Call the home team's play() method with the away team as visitor parameter.
        Team winner = home.play(away);
        // Print out the winner.
        System.out.println("Winner is:" winner.name + "from " + winner.location + " rated <winner_team_offense> (offense) + <winner_team_defense> (defense)");
        // (be sure to adhere to the format described below)
    }
}
4

3 回答 3

4

你没有winner声明。像这样改变play()方法

/**
 * Run a competition against the specified visiting team
 * 
 * @param other the team to play against
 * @returns the winner team
 */
Team play(Team visitor) {
    double home = (this.offense + this.defense + 0.2) * this.luck();
    double away = (visitor.offense + visitor.defense) * visitor.luck();
    if (home > away) {
      return this;
    }
    else {
      return visitor;
    }
}

或者,如果您只想拥有一个return(这是个好主意)-

/**
 * Run a competition against the specified visiting team
 * 
 * @param other the team to play against
 * @returns the winner team
 */
Team play(Team visitor) {
    double home = (this.offense + this.defense + 0.2) * this.luck();
    double away = (visitor.offense + visitor.defense) * visitor.luck();

    // depending on the score, return winning team. 
    return (home > away)? this : visitor;
}

最后,您可能要考虑如果分数相同会发生什么,即home == awayvisitor如果分数相等,当前代码将获胜。

于 2013-09-15T20:01:36.130 回答
2

正如@Sotirios Delimanolis 指出的那样,问题在于它winner是静态方法中的局部main变量,而不是类成员变量(又名字段),因此它在外部不可见。

于 2013-09-15T20:01:54.527 回答
0

获胜者直到 main 才被初始化。我认为你的方法 play() 是错误的。它应该写成:

Team play(Team visitor) {
    Team winner;
    double home = (this.offense + this.defense + 0.2) * this.luck();
    double away = (visitor.offense + visitor.defense) * visitor.luck();
    if (home > away) {
      winner = this;
    }
    else {
      winner = visitor
    }
    return winner;  
}

或类似的东西。另请注意,您最初设置(双打)到团队获胜者(在主要方法之外不存在的团队)

于 2013-09-15T20:05:00.200 回答