Witam, mam problem ze swoim projektem. Próbuję wczytać 16 elementów do ArrayList. 16 elementów się wczytuje, ale jak próbuję je wypisać to 16 razy wypisuje się ostatni element... Nie za bardzo rozumiem gdzie jest błąd i już nie mam pomysłów jak go poprawić...
Deklaracja ArrayList w klasie Game:
public static ArrayList<Building> buildingList = new ArrayList<>();
Metody w klasie Map do wczytywania mapy (terenu do tablicy) oraz budynków (na listę):
private void readBuilding(Terrain objct, int x, int y) {
System.out.format("Dodaję: ");
//Czerwone centrum dowodzenia
if(objct.getSSX() == 1 && objct.getSSY() == 3) {
Building b = new Building(x, y, 1, 1);
b.writeBuilding();
Game.buildingList.add(b);
}
//Czerwona miasto
if(objct.getSSX() == 2 && objct.getSSY() == 3) {
Building b = new Building(x, y, 2, 1);
b.writeBuilding();
Game.buildingList.add(b);
}
//Czerwona fabryka
if(objct.getSSX() == 3 && objct.getSSY() == 3) {
Building b = new Building(x, y, 3, 1);
b.writeBuilding();
Game.buildingList.add(b);
}
//Niebieskie centrum dowodzenia
if(objct.getSSX() == 1 && objct.getSSY() == 4) {
Building b = new Building(x, y, 1, 2);
b.writeBuilding();
Game.buildingList.add(b);
}
//Niebieska fabryka
if(objct.getSSX() == 2 && objct.getSSY() == 4) {
Building b = new Building(x, y, 2, 2);
b.writeBuilding();
Game.buildingList.add(b);
}
//Niebieskie miasto
if(objct.getSSX() == 3 && objct.getSSY() == 4) {
Building b = new Building(x, y, 3, 2);
b.writeBuilding();
Game.buildingList.add(b);
}
//Niczyje miasto
if(objct.getSSX() == 4 && objct.getSSY() == 3) {
Building b = new Building(x, y, 3, 0);
b.writeBuilding();
Game.buildingList.add(b);
}
//Niczyja fabryka
if(objct.getSSX() == 4 && objct.getSSY() == 4) {
Building b = new Building(x, y, 2, 0);
b.writeBuilding();
Game.buildingList.add(b);
}
}
private void createMap() {
map = new Terrain[40][22];
String[] fields = csvFileContent.split(";");
int x, y;
int fieldNo = 0;
for(y = 0; y < 22; y++) {
for(x = 0; x < 40; x++) {
Terrain objct = new Terrain();
objct.setSSX(Integer.parseInt(fields[fieldNo].substring(0,2)));
objct.setSSY(Integer.parseInt(fields[fieldNo].substring(2,4)));
if(objct.getSSY() > 2) {
readBuilding(objct, x, y);
objct.setSSX(3);
objct.setSSY(1);
}
fieldNo++;
map[x][y] = objct;
}
}
System.out.format("Elementow: %d\n",Game.buildingList.size());
for(Building b : Game.buildingList) {
b.writeBuilding();
}
}
Metoda klasy Map, renderująca mapę (czyli osobno teren (tablicę) i osobno budynki (z listy))
public void render(Graphics graphics, Game game) {
int x, y;
//System.out.println("Budynkow: " + game.getBuildingList().size());
for(y = 0; y < 22; y++) {
for(x = 0; x < 40; x++) {
field = ss.grabImage(map[x][y].getSSX(), map[x][y].getSSY(), 32, 32);
graphics.drawImage(field, x*32, y*32, null);
}
}
Iterator<Building> it = Game.buildingList.iterator();
while(it.hasNext()) {
Building b = it.next();
field = ss.grabImage(b.getSSX(), b.getSSY(), 32, 32);
graphics.drawImage(field, b.getX()*32, b.getY()*32, null);
}
}
Cała tablica "terenu" poprawnie się wypisuje na ekran.
Problem w tym, że na ekranie rysuje mi się tylko i wyłącznie ostatni znaleziony element (budynek)...
Budynek się renderuje poprawnie i w odpowiednim miejscu, ale co z resztą?
Dodam, że próbowałem również w ten sposób przechodzić po liście:
for(Building b : Game.buildingList) {
field = ss.grabImage(b.getSSX(), b.getSSY(), 32, 32);
graphics.drawImage(field, b.getX()*32, b.getY()*32, null);
}
Również to nic nie dało.
Wskazówka - w metodzie readBuilding() mam takie linijki:
b.writeBuilding();
przed dodaniem każdego elementu. Czyli wypisuję wartości wszystkich pól danej instancji na konsolę w NetBeans-ie. I wartości pól w obiektach się zgadzają. A i tak dodaje się coś innego, ponieważ jak próbuję wypisać całą listę to wypisuje mi jako kolejne elementy, ten sam budynek.
Bardzo proszę o pomoc. Za wszelkie pomysły i sugestie z góry serdecznie dziękuję!
Pozdrawiam!