2016-10-23 3 views
1

Meine erste Klasse namens Match schafft ein individuelles Fußball-/Fußballspiel. Es bedeutet, dass Sie 2 Teams und das Endergebnis auswählen. Die zweite Klasse namens "Team" ist etwas fortgeschrittener. Wenn die Methode play (match match) aufgerufen wird, wird die Anzahl der gespielten Spiele um 1 erhöht. Dieser Teil funktioniert einwandfrei. Meine else if-Anweisungen für (goalsForThisMatch) funktioniert auch gut. Wenn ich jedoch das Team-Klassenobjekt überprüfe, sollte es die gleichen Ziele und Ziele anzeigen, die ich in der Match-Klasse eingegeben habe. Was tatsächlich passiert ist, wenn ich die Team-Klasse nach dem Drücken der Play (Match-Match) -Methode inspiziere, sind die meisten Methoden auf 0 gesetzt, mit Ausnahme der "gespielt" -Methode (die um eins erhöht wird) und unabhängig vom Endergebnis ist. Wenn ich also die Punktzahl in der Spielklasse eingegeben habe, so dass die Heimmannschaft mehr Tore erzielt und das Spiel gewonnen hat, wird die Won-Methode im Objektinspektor für die Team-Klasse um 1 erhöht. Ich brauche zwei der anderen Methoden in der Teamklasse, um mit der Spielklasse zu verlinken. Diese Methoden sind: Ziele für und Ziele gegen. Wenn ich die GoalsFor in der Match-Klasse auf "4" setze, sollte die TorsFor auch auf 4 gesetzt werden, wenn ich die Team-Klasse kontrolliere.Wie auf Variablen in einer anderen Klasse zugreifen?

Ich weiß, dass das alles klingt wahrscheinlich sehr verwirrend, bitte vergib mir, ich bin so müde, ich bin im Begriff, in den Schlaf gehen. Hoffentlich hätte jemand am Morgen dieses Problem für mich sortiert.

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

Code-Überprüfung Artikel: viele Ihrer Variablennamen nicht folgen [Java Namenskonventionen] (http://www.oracle.com/technetwork/java/ Code-Konventionen-1 35099.html), wodurch Ihr Code schwieriger zu lesen ist. Bitte benennen Sie Variablen, die mit Kleinbuchstaben beginnen, so dass sie keine Klassennamen zu sein scheinen. –

Antwort

0

Ich glaube, das Problem, das Sie haben, ist, dass die Felder Ihrer Team Klasse werden nicht aktualisiert werden, wenn Sie die play Methode aufrufen.

Der Grund, warum Sie dieses Verhalten ist, dass Sie lokale Variablen innerhalb der play Methode sind definiert, die Ihre Klasse Membervariablen verbergen:

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

Ihre GoalsFor und ShortName lokalen innerhalb dieser Methode definierten Variablen sind, um die Klasse zu verstecken Membervariablen Sie an der Spitze der Klasse definiert:

public class Team 

    private String TeamName; 
    private String ShortName; 
    private int Played; 
    private int GoalsFor; 
    ... 
Verwandte Themen