2016-04-19 5 views
0

Ich bin neu in Java und ich habe über eine lange Zeit gesucht. Wie kann ich Zugriff auf die b-Variablen des Elements in der Klasse Player haben? (Der Code, den ich poste, ist ein Teil meines vollständigen Programms, also nichts dagegen, wenn Sie Methoden oder Variablen sehen, die im folgenden Code nicht deklariert sind)Wie kann ich auf die Variablen eines Elements in einer anderen Klasse zugreifen, die nicht damit in Beziehung stehen?

import java.util.Random; 
public abstract class Player { 
private int x, y; 
private String name; 
private int pNumber; 
private int mLine; 
private int tLine; 
private boolean possession; 
private int c; 
private int f = 0; 
private int i = 0; 


public int getPlx() { 
    return x; 
} 
public void setPlx(int x) { 
    this.x = x; 
} 
public int getPly() { 
    return y; 
} 
public void setPly(int y) { 
    this.y = y; 
} 
public String getPName() { 
    return name; 
} 
public void setPName(String name) { 
    this.name = name; 
} 
public int getPNum() { 
    return pNumber; 
} 
public void setPNum(int pNumber) { 
    this.pNumber = pNumber; 
} 
public int getMLine() { 
    return mLine; 
} 
public void setMLine(int mLine) { 
    this.mLine = mLine; 
} 
public int getLine() { 
    return tLine; 
} 
public void setTLine(int tLine) { 
    this.tLine = tLine; 
} 
public boolean getPos() { 
    return possession; 
} 
public void setPos(boolean possession) { 
    this.possession = possession; 
} 

private Random rand = new Random(); 

public void Move() { //me8odos metakinisis 
    c = rand.nextInt(2); 
    if (c == 0) { 
    y++; 
    } else { 
    y--; 
    } 
} 
public void Pass() { 
    if (this.possession == true) { 
    c = rand.nextInt(10); 
    while ((f == 0) && (i < 10)) { 
    if (main.barcelona.get(i).name == this.name) {} 
    } 
    } 
} 
public abstract void SpecialMove(); 
} 

public class Ball { 
private int x, y; 
private Player formerP = null; 
private Player currentP = null; 

public Ball(int x, int y, Player formerP, Player currentP) { 
    this.x = x; 
    this.y = y; 
    this.formerP = formerP; 
    this.currentP = currentP; 
} 

public int getBX() { 
    return x; 
} 
public void setBX(int x) { 
    this.x = x; 
} 
public int getBY() { 
    return y; 
} 
public void setBY(int y) { 
    this.y = y; 
} 

void Assign(Player playerP) { 
    int px = playerP.getPlx(); 
    if (this.currentP == null) { 
    if (((this.x - px <= 1) || (px - this.x) <= 1) 
     && ((this.x - px <= 1) || (px - this.x) = 1)) { 
    this.currentP = playerP; 
    this.formerP.possession = false; 
    playerP.possession = true; 

    if (this.currentP.team == this.formerP.team) { 
    int pass = this.currentP.getPasses(); 
    pass++; 
    this.currentP.setPasses(pass); 
    } else { 
    int mistake = this.currentP.getMistakes(); 
    mistake++; 
    this.currentP.setMistakes(mistake); 
    } 
    } 
    } 
    this.formerP = this.currentP; 
    this.currentP = null; 
    this.formerP = null; 
} 
} 
+0

Sie können diese Variablen nicht auf magische Weise aufrufen, wenn Sie keine Variablenverweise auf eine vorhandene Instanz der Klasse haben, deren Variablen Sie aufrufen oder auf statische Variablen zugreifen möchten. (Sie sollten auch bei der Javas Namenskonvention bleiben, die besagt, dass die Methode mit einem niedrigeren Buchstaben beginnen sollte) – SomeJavaGuy

+0

Also muss ich die Variablen der Klasse Ball als statisch deklarieren? – burrito

Antwort

0

Wenn Sie nicht die Klasse Ball in der Player Klasse instanziiert wollen und Sie möchten, um sicherzustellen, dass alle Spieler mit dem einen und einzigen Ball spielen, dann erwägen Ball ein Singleton machen.

In der Softwareentwicklung ist das Singleton-Muster ein Entwurfsmuster, das die Instanziierung einer Klasse auf ein Objekt einschränkt. Dies ist nützlich, wenn genau ein Objekt zum Koordinieren von Aktionen im System benötigt wird.

public class Ball { 
    private static Ball singletonBall; 

    private int x; 
    private int y; 
    private Player formerP; 
    private Player currentP; 


    public static Ball getSingletonBall() { 
     if(singletonBall == null){ 
      singletonBall = new Ball(); 
     } 
     return singletonBall; 
    } 

    public int getX() { 
     return x; 
    } 


    public void setX(int x) { 
     this.x = x; 
    } 


    public int getY() { 
     return y; 
    } 


    public void setY(int y) { 
     this.y = y; 
    } 


    public Player getFormerP() { 
     return formerP; 
    } 


    public void setFormerP(Player formerP) { 
     this.formerP = formerP; 
    } 


    public Player getCurrentP() { 
     return currentP; 
    } 


    public void setCurrentP(Player currentP) { 
     this.currentP = currentP; 
    } 
} 
+0

wo ist xCoordinate aufgetreten? – burrito

+0

Hast du das Ball-Objekt wie abgebildet dem Spieler-Objekt zugewiesen? –

+0

@ kafes13 Ich habe eine Deklaration für die Variable 'xCoordinate' hinzugefügt. Entschuldigung, ich nahm an, dass die Erklärung verstanden wurde. –

0

Wenn es etwas ist, dass Sie innerhalb Spieler müssen, dass Sie häufig verwenden werden, die nicht während der gesamten Lebensdauer des Spielerobjekts (oder Sub-Objekts in Ihrem Fall) ändern, dann könnten Sie auch Übergeben Sie es über den Player-Konstruktor an eine lokale Variable.

Nehmen wir an, Punkt B ist der Ball und Sie haben eine Ball-Klasse.

So in Spieler (oder Sub-Spieler) erklären Sie Ihr Objekt möchten Sie Zugriff auf:

class Player { 
    Ball ball; 

    public Player(Ball ball) { 
     this.ball = ball; 
    } 

Oder wenn es nur etwas, das Sie selten verwenden werden oder etwas, das Wert ist mit einem (eher ändern Ball), dann erstellen Sie eine Methode, um das, was Sie auf dem Player-Objekt benötigen, auszuführen.

class Player { 
. 
. 
. 
. 
. 
    public void dribble(Ball ball) { 
    // do something with the ball 
     ball.setPosition(10, 20); 
     ball.update(); 
    } 
} 

Dann was auch immer instanziiert Spieler kann diese Methode zugreifen.

public static void main(String[] args) { 
    Player player = new Player(); 
    Ball ball = new Ball(); 
    player.dribble(ball); 
} 
+0

Ich möchte die Werte des Elements Ball in der Klasse Player ändern, die kein neues Element vom Typ Ball – burrito

+0

erstellen In diesem Fall ist mein zweites Beispiel die Art und Weise, darüber zu gehen . Was auch immer Ihren Player und Ihren Ball instanziiert, dann sollten Sie eine Methode im Player aufrufen, die den Wert des Balls ändert. –

+0

Ich habe ein wenig Code oben geändert, nur um Ihnen zu zeigen, was ich meine. Beachten Sie, wie ich Methoden am Ball aufrufen kann, indem ich sie als Parameter an den Spieler übergebe. Es ist wichtig, dass diese Methoden in der Ballklasse, die Sie aufrufen, aus der Player-Klasse stammen. –

0

versuchen BallClassName.getX(); Möglicherweise müssen Sie getX statisch machen

Verwandte Themen