我試圖將數組normMap中的值更改爲另一個值,但這樣做也會更改數組fireMap中的值。在一個列表中更改值將其更改爲單獨的一個
public int boardX = Board.boardX;
public int boardY = Board.boardY;
public int tileSizeX = Board.tileSizeX;
public int tileSizeY = Board.tileSizeY;
public int curr_dimension = Board.current_dimension;
public BufferedImage[] grassImage = {Board.norm.grassImage, Board.fire.grassImage};
public BufferedImage[] waterImage = {Board.norm.waterImage, Board.fire.waterImage};
public BufferedImage[] pathVImage = {Board.norm.pathVImage, Board.fire.pathVImage};
public BufferedImage[] pathHImage = {Board.norm.pathHImage, Board.fire.pathHImage};
public BufferedImage[] treeImage = {Board.norm.treeImage, Board.fire.treeImage};
// y/x/tile type
public List<List<Integer>> normMap = new ArrayList<List<Integer>>();
public List<List<Integer>> fireMap = new ArrayList<List<Integer>>();
@Override
public void mouseClicked(MouseEvent arg0)
{
int y = (int) Math.ceil((arg0.getY() + boardY * tileSizeY)/32);
int x = (int) Math.ceil((arg0.getX() + boardX * tileSizeX)/32);
switch(curr_dimension)
{
case(0): normMap.get(y).set(x, 0); break;
case(1): fireMap.get(y).set(x, 0); break;
}
}
@Override
public void keyPressed(KeyEvent arg0)
{
switch(arg0.getKeyCode())
{
case(KeyEvent.VK_ENTER): writeFile(); break;
case(KeyEvent.VK_ESCAPE): GameStateManager.setState(GameStateManager.MENU_STATE); break;
case(KeyEvent.VK_UP): boardY--; break;
case(KeyEvent.VK_DOWN): boardY++; break;
case(KeyEvent.VK_LEFT): boardX--; break;
case(KeyEvent.VK_RIGHT): boardX++; break;
case(KeyEvent.VK_1): curr_dimension = 0; break;
case(KeyEvent.VK_2): curr_dimension = 1; break;
}
}
public String getPrefix(int dimension)
{
switch(dimension)
{
case(0): return "norm";
case(1): return "fire";
default:
System.out.println("Incorrect dimension, "
+ dimension + ". Find the map in maps/custom/unidentified.");
return "unidentified";
}
}
public void writeFile()
{
List<List<Integer>> map;
switch(curr_dimension)
{
case(0): map = normMap; break;
case(1): map = fireMap; break;
default: map = normMap; break;
}
PrintWriter writer;
try
{
for(int i = 0; i < 2; i++)
{
writer = new PrintWriter("/maps/custom/" + getPrefix(i) + "map1.txt", "UTF-8");
for(List<Integer> list : map)
{
for(int integer : list)
{
writer.print(integer + " ");
}
writer.println("");
}
writer.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public void init()
{
Main.panel.addKeyListener(this);
Main.panel.addMouseListener(this);
for(int i = 0; i < 50; i++)
{
List<Integer> map1 = new ArrayList<Integer>();
for(int j = 0; j < 50; j++)
{
map1.add(9);
}
normMap.add(map1);
fireMap.add(map1);
}
}
public void draw(Graphics g)
{
switch(curr_dimension)
{
case(0): drawTiles(g, normMap); break;
case(1): drawTiles(g, fireMap); break;
}
}
public void drawTiles(Graphics g, List<List<Integer>> map)
{
for(int y = 0; y < map.size(); y++)
{
List<Integer> mapY = map.get(y);
for(int x = 0; x < mapY.size(); x++)
{
if(mapY.get(x) == 0) g.drawImage(grassImage[curr_dimension], (x - boardX) * tileSizeX, (y - boardY) * tileSizeY, null);
else if(mapY.get(x) == 1) g.drawImage(waterImage[curr_dimension], (x - boardX) * tileSizeX, (y - boardY) * tileSizeY, null);
else if(mapY.get(x) == 2) g.drawImage(pathVImage[curr_dimension], (x - boardX) * tileSizeX, (y - boardY) * tileSizeY, null);
else if(mapY.get(x) == 4) g.drawImage(pathHImage[curr_dimension], (x - boardX) * tileSizeX, (y - boardY) * tileSizeY, null);
else if(mapY.get(x) == 3) g.drawImage(treeImage[curr_dimension], (x - boardX) * tileSizeX, (y - boardY) * tileSizeY - tileSizeY, null);
else if(mapY.get(x) == 9) g.drawRect((x - boardX) * tileSizeX, (y - boardY) * tileSizeY, tileSizeX, tileSizeY);
else if(mapY.get(x) == Board.PLAYER) GameState.player.draw(g, x, y, boardX, boardY, tileSizeX, tileSizeY);
}
}
}}
預期輸出是兩個不同的列表。但是,打印出fireMap和normMap顯示了相同的結果。
刪除了不重要的代碼段。請告訴我是否需要澄清任何事情。
請添加代碼剪斷要在其中面向錯誤ö問題。不要馬上粘貼整個代碼。 – FallAndLearn
你在哪裏打印列表值? –
@FallAndLearn我已經刪除了所有與該問題無關的代碼,我是否應該進一步減少它? – that2guy