Я работаю над Java-версией настольной игры RoboRally и в настоящее время работаю над классом, который анализирует JSON-документ как часть создания игровой доски.Он почти работает как задумано, но не совсем.
Документ JSON отформатирован как система координат, содержащая информацию о том, что находится на доске, и где она расположена.Метод generateJsonBoard () должен анализировать информацию из документа.Он возвращает массив ICell [] [], где каждый объект Cell в массиве содержит список элементов поверх ячейки.
Метод почти работает, но он сталкивается с проблемами, когда существует более одногоэлемент в массиве JSON.Кажется, он выбирает только последний элемент массива и добавляет его в список, игнорируя остальные.
Мой вопрос действительно сводится к тому, кто видит, почему списки List в моих объектах Cell содержат только один элементдаже если массив JSON содержит более одного (например, в расположении [0] [0].
Вот часть JSON-документа
{
"0": {
"0": ["NorthWall","FlagOne","FlagTwo","FlagThree"],
"1": ["NorthWall"],
"2": ["NorthWall"],
"3": ["NorthWall"],
"4": ["NorthWall"],
"5": ["NorthWall"],
"6": ["NorthWall"],
"7": ["NorthWall"],
"8": ["NorthWall"],
"9": ["NorthWall"]
},
"1": {
"0": ["WestWall"],
"1": [],
"2": [],
"3": [],
"4": [],
...
...
А вот код Java.
public class JSONBoardGenerator {
JSONParser parser = new JSONParser();
public ICell[][] generateJsonBoard(String filepath) {
ICell[][] jsonBoardPieceList2 = null;
try {
Object boardFile = parser.parse(new FileReader(filepath));
JSONObject jsonBoardFile = (JSONObject) boardFile;
int jsonSize = jsonBoardFile.size();
int jsonSide = jsonSize / jsonSize;
jsonBoardPieceList2 = new ICell[10][10];
System.out.println(jsonBoardFile);
for (int x = 0; x <= 9; x++) {
for (int y = 0; y <= 9; y++) {
String intX = Integer.toString(x);
String intY = Integer.toString(y);
JSONObject xCord = (JSONObject) jsonBoardFile.get(intX);
JSONArray yCord = (JSONArray) xCord.get(intY);
Iterator<String> iterator = yCord.iterator();
while (iterator.hasNext()) {
Cell tempCell = new Cell();
jsonBoardPieceList2[x][y] = tempCell;
String jsonIterator = iterator.next();
System.out.println(jsonIterator);
switch (jsonIterator) {
case "Hole":
System.out.println("Making Hole!");
break;
case "NorthWall":
System.out.println("Making northfacing wall!");
tempCell.addPiece(new Wall(Direction.NORTH));
break;
case "EastWall":
System.out.println("Making eastfacing wall!");
tempCell.addPiece(new Wall(Direction.EAST));
break;
case "SouthWall":
System.out.println("Making southfacing wall!");
tempCell.addPiece(new Wall(Direction.SOUTH));
break;
case "WestWall":
System.out.println("Making westfacing wall!");
tempCell.addPiece(new Wall(Direction.WEST));
break;
/**
case "ConveyorNorth":
System.out.println("Making northfacing conveyor!");
new Conveyor(Direction.NORTH, 1);
break;
case "ConveyorEast":
System.out.println("Making eastfacing conveyor!");
new Conveyor(Direction.EAST, 1);
break;
case "ConveyorSouth":
System.out.println("Making southfacing conveyor!");
new Conveyor(Direction.SOUTH, 1);
break;
case "ConveyorWest":
System.out.println("Making westfacing conveyor!");
new Conveyor(Direction.WEST, 1);
break;
*/
case "FlagOne":
System.out.println("Making flag number 1");
tempCell.addPiece(new Flag(1));
break;
case "FlagTwo":
System.out.println("Making flag number 2");
tempCell.addPiece(new Flag(2));
break;
case "FlagThree":
System.out.println("Making flag number 3");
tempCell.addPiece(new Flag(3));
break;
}
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
return jsonBoardPieceList2;
}
}