2015-04-23 13 views
5

Also das ist nur ein Teil meines Codes, und das gesamte Programm kompiliert und funktioniert, aber ich bekomme immer "lokale Variable verbirgt ein Feld" neben Zeilen drei aufeinander folgenden Zeilen beginnend mit "GameBoard myBoard = this.getGameBoard();". ich bin nur neugierig, was das eigentlich bedeutet, und wenn es etwas zu meinem Programm auf lange Sicht tutWas bedeutet lokale Variable verbirgt ein Feld?

public void initialze(){ 
    myBoard = getGameBoard(); 
    obstacleLocations = myBoard.getObstaclePositions(); 
    pastureLocations = myBoard.getPasturePositions(); 

GameBoard myBoard = this.getGameBoard(); 
    ArrayList<GameLocation> obstacleLocations = myBoard.getObstaclePositions(); 
    ArrayList<GameLocation> pastureLocations = myBoard.getPasturePositions(); 
    GameLocation closestPasture = pastureLocations.get(0); 
    GameLocation closestObstacle = obstacleLocations.get(0); 
+2

Es ist weil Sie Variablennamen wiederverwenden. Achten Sie auf Ihre Benennung und verhindern Sie Dubletten. – CubeJockey

Antwort

12

es bedeutet, dass Sie zwei verschiedene Variablen mit dem gleichen Namen haben -.. myBoard Einer von ihnen ist ein Feld in Ihrer Klasse Ein anderes ist eine lokale Variable, dh eine, die Sie innerhalb einer Methode deklariert haben

Es ist eine schlechte Idee, zwei Variablen mit dem gleichen Namen zu haben Ihr Code ist sehr verwirrend und schwer zu pflegen.

+0

Also ist eine Lösung, um einfach die Variablen innerhalb der Methode oder Klasse zu entfernen und sie nur in einer der beiden enthalten? – MikeV

+0

Nein, geben Sie ihnen nur verschiedene Namen – ControlAltDel

+0

Es hängt davon ab, was 'getGameBoard()' tut. Wenn es nur 'return myBoard' ist, dann sollten Sie beide Zeilen entfernen: myBoard = getGameBoard();' (was nichts tut) und 'GameBoard myBoard = getGameBoard();' (das ist die Zeile, die Ihr Problem verursacht) . –

1

Die lokale Variable in einer Methode ist immer die Variable mit der höchsten Sichtbarkeit. Aus diesem Grunde in einer Klasse Setter man immer etwas tun:

void setId(String id) { 
    this.id = id; 
} 

Die this.id sagt Java die id (aus dem Parameter) in das Feld Variablen zugewiesen werden. Deshalb wird dies nicht funktionieren:

void setId(String id) { 
    id = id; 
} 

Da es id sich zuweisen werden.

Sie können über den Bereich lesen, siehe: http://www.java-made-easy.com/variable-scope.html für ein Beispiel.

+0

Vielen Dank; bin dankbar. – MikeV

+0

Sie können immer eine Antwort, die Sie nützlich finden, abstimmen und jede Antwort Ihrer Frage akzeptieren, die Ihr Problem richtig zu beantworten scheint. – JFPicard

Verwandte Themen