2

我在调用 getChoice() 方法时遇到错误,它说变量 footballTeam2 已在 main 方法中定义,这是为什么呢?我也正确地调用了我的其他方法吗?在此先感谢各位,真的可以使用一些帮助。

import java.util.Scanner;

public class FootballGame { 
    static Scanner keyboard = new Scanner(System.in);
    static int arewedone = 0;
    static String choice;
    static FootballTeam team;

public static void main(String[] args) {

    FootballTeam footballTeam1;
    FootballTeam footballTeam2;

    System.out.print("Enter a name for a team:");
    footballTeam1 = new FootballTeam(keyboard.nextLine(), 0);
    System.out.print("Enter a name for another team:");
    footballTeam2 = new FootballTeam(keyboard.nextLine(), 0);

    do{
        System.out.println("Game Score:");
        System.out.println(footballTeam1.getName() + ":" + footballTeam1.getScore());
        System.out.println(footballTeam2.getName() + ":" + footballTeam2.getScore());

        choice = getMenuChoice(FootballTeam footballTeam1, FootballTeam footballTeam2);
        handleTeamScore(team);

    }while(arewedone == 0);
}

public static String getMenuChoice(FootballTeam footballTeam1, FootballTeam footballTeam2) {
    String input;

    do {
        System.out.println("Select an option:");
        System.out.println("A:" + footballTeam1 + " scored");
        System.out.println("B:" + footballTeam2 + " scored");
        System.out.println("C: game ended.");
        System.out.println("?:");
        input = keyboard.nextLine();
        if (input.equalsIgnoreCase("A")) {
            choice = (footballTeam1 + "");
            arewedone = 0;
        } else if (input.equalsIgnoreCase("B")) {
            choice = (footballTeam2 + "");
            arewedone = 0;
        } else if (input.equalsIgnoreCase("C")) {
            System.out.println("Game Over");
            arewedone++;
        }

    } while (!input.equals("A") && !input.equals("B") && !input.equals("C"));

    return choice;
}

public static void handleTeamScore(FootballTeam team) {

    int points;

    do {
        System.out.println("How many points were scored?");
        System.out.print("?: ");

        points = keyboard.nextInt();

        if ((team.addScore(points)) == true) {
            arewedone++;
        } else {
            System.out.println("That was an invalid option. Please try again.");
            System.out.println("Hints:");
            System.out.println("Touchdown = 6 points");
            System.out.println("Field Goal = 3 points");
            System.out.println("Safety = 2 points");
            System.out.println("Extra Point = 1 point");
        }
    } while (arewedone == 0);
}    

}

这是我的另一个类,带有 addcore 方法和 getter 和 setter。

public class FootballTeam {

private String name;
private int score;
public static int TOUCHDOWN = 6;
public static int FIELD_GOAL = 3;
public static int SAFETY = 2;
public static int TWO_POINT_CONVERSION = 2;
public static int EXTRA_POINT = 1;


public FootballTeam(String name, int score) {
    this.name = name;
    this.score = score;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getScore() {
    return score;
}

public void setScore(int score) {
    this.score = score;
}

public boolean addScore(int points) {
    if (points == TOUCHDOWN || points == FIELD_GOAL || points == SAFETY || points == TWO_POINT_CONVERSION || points == EXTRA_POINT) {
        score = points + score;
        return true;
    } else {
        return false;
    }

}
}
4

2 回答 2

1

更改方法调用

choice = getMenuChoice(FootballTeam footballTeam1, FootballTeam footballTeam2);

对此:

choice = getMenuChoice(footballTeam1, footballTeam2);

编辑

您需要FootballTeam team在调用之前进行初始化handleTeamScore(team);

team = new FootballTeam(...);
handleTeamScore(team);

更改以下代码块getMenuChoice

if (input.equalsIgnoreCase("A")) {
            choice = (footballTeam1 + "");
            arewedone = 0;
        } else if (input.equalsIgnoreCase("B")) {
            choice = (footballTeam2 + "");
            arewedone = 0;

对此:

public static String getMenuChoice(...){
...
if (input.equalsIgnoreCase("A")) {
            choice = "footballTeam1";
            arewedone = 0;
        } else if (input.equalsIgnoreCase("B")) {
            choice = "footballTeam2";
            arewedone = 0;
...
}

现在将这两个语句替换为main

choice = getMenuChoice(footballTeam1, footballTeam2);
handleTeamScore(team);

对此:

choice = getMenuChoice(footballTeam1, footballTeam2);
if(choice != null) {
if(choice.equals("footballTeam1")){
team = footballTeam1;
}

if(choice.equals("footballTeam2")){
team = footballTeam2;
}
handleTeamScore(team);
}
于 2013-11-09T04:18:08.860 回答
0

你错误地调用你的方法

你应该这样称呼它

choice = getMenuChoice1( footballTeam1,  footballTeam2);

通过这样称呼它

choice = getMenuChoice(FootballTeam footballTeam1, FootballTeam footballTeam2);

无论您是调用方法还是声明新方法,都会使编译器感到困惑。我们不需要在调用方法时输入类型,它总是隐含的

于 2013-11-09T04:24:19.283 回答