2015-04-23 11 views
5

To jest tylko część mojego kodu, a cały program kompiluje się i działa, ale ciągle otrzymuję "lokalną zmienną ukrywa pole" obok linii trzech kolejnych linii zaczynając od "GameBoard myBoard = this.getGameBoard() ;. Jestem tylko ciekaw, co to oznacza w rzeczywistości, a jeśli to robi wszystko, aby mój program w dłuższej perspektywieJakie jest znaczenie zmiennej lokalnej ukrywa pole?

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

To dlatego, że ponownie używasz nazw zmiennych. Zwróć uwagę na swoje nazewnictwo i zapobiegnij duplikatom. – CubeJockey

Odpowiedz

12

oznacza to, że masz dwie różne zmienne o tej samej nazwie. -. myBoard Jednym z nich jest Innym jest zmienna lokalna, czyli taka, którą zadeklarowałeś w metodzie.

To zły pomysł, aby mieć dwie zmienne o tej samej nazwie. Twój kod jest bardzo mylący i trudny do utrzymania.

+0

Więc jest rozwiązaniem, aby po prostu usunąć zmienne wewnątrz metody lub klasy i po prostu je zawrzeć w jednym z dwóch? – MikeV

+0

Nie, po prostu nadaj im różne nazwy. – ControlAltDel

+0

Zależy od tego, co robi 'getGameBoard()'. Jeśli wszystko, co robi, to 'return myBoard', wtedy powinieneś usunąć obie linie' myBoard = getGameBoard(); '(która nic nie robi) i' GameBoard myBoard = getGameBoard(); '(która jest linią, która powoduje twój problem) . –

1

Zmienna lokalna w metodzie jest zawsze zmienną o najwyższej widoczności. Dlatego w seter klasy zawsze zrobić coś takiego:

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

this.id mówi Java, aby przypisać id (od parametru) do zmiennej pola. Dlatego to nie zadziała:

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

Ponieważ przypisuje sobie wartość id.

Możesz przeczytać o zakresie, zobacz: http://www.java-made-easy.com/variable-scope.html na przykład.

+0

Wielkie dzięki; doceniam to. – MikeV

+0

Zawsze możesz głosować w górę na odpowiedź, która okaże się przydatna i przyjmiesz dowolną odpowiedź na pytanie, które wydaje się poprawnie odpowiadać na Twój problem. – JFPicard