2016-10-23 3 views
1

나의 첫 번째 클래스 경기는 개별 축구/축구 경기를 만듭니다. 그것은 당신이 2 팀과 최종 점수를 선택하게합니다. "팀"이라고 불리는 두 번째 클래스는 좀 더 발전했습니다. play (match match) 메서드가 호출되면 재생 된 게임 수가 1 씩 증가합니다.이 부분은 잘 동작합니다. 내 else if 문 (goalsForThisMatch)도 잘 작동합니다. 그러나 Team 클래스 객체를 검사 할 때 Match 클래스에 입력 한 것과 동일한 목표와 목표를 표시해야합니다. 실제로 일어나는 일은 play (Match match) 메서드를 누른 후 Team 클래스를 검사 할 때 메서드의 대부분이 0으로 설정됩니다 (재생 된 메서드 (1로 증가하는 것으로 가정) 및 최종 점수 입니다. 따라서 홈 팀이 더 많은 득점을 올리고 경기에서 승리 한 결과로 경기 클래스에서 점수를 입력하면 팀 관리자의 개체 검사에서 Won 메서드가 1 씩 올라갑니다. 다른 두 가지 방법이 필요합니다. 팀 클래스에서 일치하는 클래스와 연결합니다. 이러한 방법은 다음과 같습니다. 목표 및 목표. Match 클래스의 GoalsFor를 "4"로 입력하면 Team 클래스를 검사 할 때 goalsFor도 4로 설정되어야합니다.다른 클래스의 변수에 액세스하는 방법은 무엇입니까?

나는이 모든 것이 아마도 매우 혼란 스럽다는 것을 알고있다. 나를 용서해 주길. 나는 너무 피곤해서 잠을 자려고하고있다. 다행히 아침에 누군가가 나를 위해이 문제를 분류했을 것입니다.

public class Match 

    // instance variables - replace the example below with your own 
    private String HomeTeam; 
    private String AwayTeam; 
    private int HomeGoals; 
    private int AwayGoals; 


    /** 
    * Constructor for objects of class Match 
    */ 
    public Match(String ShortHomeTeamName, String ShortAwayTeamName, int NewHomeGoals, int NewAwayGoals) 
    { 
     // initialise instance variables 
     HomeTeam = ShortHomeTeamName; 
     AwayTeam = ShortAwayTeamName; 
     HomeGoals = NewHomeGoals; 
     AwayGoals = NewAwayGoals; 
    } 

     public String getHomeTeamName(){ 

     return HomeTeam; 
    } 

     public String getAwayTeamName(){ 

     return AwayTeam; 
    } 

     public int getHomeGoals(){ 

     return HomeGoals; 
    }  

     public int getAwayGoals(){ 

     return AwayGoals; 
    }  


} 




public class Team 

    private String TeamName; 
    private String ShortName; 
    private int Played; 
    private int GoalsFor; 
    private int GoalsAgainst; 
    private int GoalDifference; 
    private int Won; 
    private int Drawn; 
    private int Lost; 
    private int Points; 


    /** 
    * Constructor for objects of class Team 
    */ 
    public Team(String FullTeamName, String ShortTeamName) 
    { 
     // initialise instance variables 
     TeamName = FullTeamName; 
     ShortName = ShortTeamName; 
     Played = 0; 
     GoalsFor = 0; 
     GoalsAgainst = 0; 
     GoalDifference = 0; 
     Won = 0; 
     Drawn = 0; 
     Lost = 0; 
     Points = 0;  
    } 

    public String getTeamName(){ 

     return TeamName; 
    } 

    public String getShortName(){ 

     return ShortName; 
    } 

    public int getPlayed(){ 

     return Played; 
    } 

    public void getGoalsFor(int InsertGoalsFor){ 

     GoalsFor = InsertGoalsFor; 
    } 

    public void getGoalsAgainst(int InsertGoalsAgainst){ 

     GoalsAgainst = InsertGoalsAgainst; 

    } 

    public int getGoalDifference(){ 


     return (GoalsFor - GoalsAgainst); 


    } 

    public int getWon(){ 

     return Won; 
    } 

    public int getDrawn(){ 

     return Drawn; 
    } 

    public int getLost(){ 

     return Lost; 

    }  

    public int getPoints(){ 

     return Points; 

    } 

    public void play(Match match){ 

     Played++; 

     int GoalsFor = match.getHomeGoals(); 
     int goalsForThisMatch = match.getHomeGoals(); 
     int goalsAgainstThisMatch = match.getAwayGoals(); 
     String homeTeam = match.getHomeTeamName(); 
     String ShortName = match.getHomeTeamName(); 

     if (ShortName.equals(TeamName)){ 

      ShortName = homeTeam; 

     } else { 

      ShortName = match.getAwayTeamName(); 

     } 

     if (goalsForThisMatch > goalsAgainstThisMatch){ 

      Won++; 

     } 

     else if (goalsForThisMatch == goalsAgainstThisMatch){ 

      Drawn++; 

     } 

     else { 

      Lost++; 


     } 


    } 

} 
+2

코드 검토 항목 : 많은 Java 이름 지정 규칙이 [Java 명명 규칙] (http://www.oracle.com/technetwork/java/)을 따르지 않습니다. 코덱 액션 -1 35099.html)을 사용하면 코드를 읽기가 더 어려워집니다. 클래스 이름이 아닌 것처럼 소문자로 시작하는 변수의 이름을 지정하십시오. –

답변

0

은 당신이 발생하는 문제가 당신이 play 메소드를 호출 할 때 Team 클래스의 필드가 업데이트되지 않는 것을 믿습니다. 클래스를 숨기고있는이 방법 안에 정의

public void play(Match match){ 
    ... 
    int GoalsFor = match.getHomeGoals(); 
    int goalsForThisMatch = match.getHomeGoals(); 
    int goalsAgainstThisMatch = match.getAwayGoals(); 
    String homeTeam = match.getHomeTeamName(); 
    String ShortName = match.getHomeTeamName(); 
    ... 

귀하의 GoalsForShortName 지역 변수 :

이 동작을 볼 수있는 이유는 당신이 당신의 클래스 멤버 변수를 숨기 play 방법 내에서 지역 변수를 정의하고 있다는 것입니다

public class Team 

    private String TeamName; 
    private String ShortName; 
    private int Played; 
    private int GoalsFor; 
    ... 
관련 문제